#**************************************************************************
#  Wandaussparung Typ Fenster (mit Brüstung)
#**************************************************************************
# 2021-03-30 LF
#
save_fsm();
# Integervariablen
name(i60,"xanz_l");		xanz_l = 2;		# Anzahl A1-Laengseisen
name(i61,"xanz_lo");	xanz_lo = 2;	# Anzahl A1-Laengseisen Sturz
name(i62,"xd_lo");		xd_lo   = 12;	# Durchmesser A1-Laengseisen Sturz
name(i63,"xd_l");		xd_l   = 12;	# Durchmesser A1-Laengseisen 
name(i64,"xd_b");		xd_b   = 8;		# Durchmesser A3 Stecker
name(i65,"xd_bo");		xd_bo  = 8;		# Durchmesser Sturzbügel
name(i66,"xd_w");		xd_w   = 12;    # Durchmesser Wandbewehrung
name(i68,"xumfa");		xumfa  = 0;		#Umfahrungssinn 0=math.Positiv(Gegenuhrteigersinn)  1=math.Negativ
# Realvariablen 
name(r60,"xbetde");		xbetde  = 0.03 * WCOIUF;	# Variable fuer Betondeckung allgemein
name(r61,"xhoch");		xhoch   = 1.385 * WCOIUF;	# Hoehe Öffnung
name(r62,"xho_o");		xho_o   = 0.49 * WCOIUF;	# Hoehe Öffnung
name(r63,"xho_u");		xho_u   = 0.885 * WCOIUF;	# Hoehe Öffnung
name(r64,"xho_w");		xho_w   = 2.76 * WCOIUF;	# Hoehe Öffnung
name(r65,"xabs_b");		xabs_b  = 0.15 * WCOIUF;	# Abstand Stecker
name(r66,"xabs_bo");	xabs_bo = 0.15 * WCOIUF;	# Abstand Sturzbügel
name(r67,"xverank");	xverank = 0.60 * WCOIUF;	# Verankerungslaenge/Ueberstand A1 Eisen
name(r68,"xueb_st");	xueb_st = 0.45 * WCOIUF;	# Stecker Länge oben/unten
name(r69,"xwi_k");	                                # Jeweiliger Winkel entlang Kante 1-2
name(r70,"xwi_a");	                                # Jeweiliger senkrechter Winkel (nach aussen)entlang Kante 1-2
name(r71,"xwi_zk");									# Jeweiliger um 90° gedr. Winkel xwi_k
name(r72,"xlen_k");	                                # Jeweilige Kantenlaenge
name(r73,"xd_b_ber");	# Durchm Bügel für Berechnung
name(r74,"xd_l_ber");	# Durchm Längseis. für Berechnung
name(r75,"xd_w_ber");	# Durchm Wandbew. für Berechnung

# Punktvariablen
name(p60,"xecka");	# UK Wand 
name(p61,"xeckb");	# 1. P Diagonale 
name(p63,"xeckc");	# 2. P Diagonale
name(p64,"xeckd");	# 3. P Dicke
name(p65,"xecke");	# OK Wand/Decke 
name(p66,"xeckf");	# P für Berechnungen L/B 
name(p67,"xeckg");	# P für Berechnungen L/B 

# Textvariablen
name(s8,"Xform");	  # gewählte Bügelform
name(s60,"txformat"); # Dialog Formatanweisung
  
    TRANSLATE_TEXT(s1,-1,"WCO_SBW","");	# aktiviert übersetzte Texte aus Datei

	#Aufruf aus 3D Bauteilbewehrung->Punkte sind vorgegeben.    
	if(DREIDBAUTEIL = 1) then 
		begin 
		sbwecke(1001,xecka,0);				# gezeigte UK Wand a
		sbwecke(1002,xeckb,0);				# gezeigte UK Fenster Ecke b
		sbwecke(1003,xeckc,0);				# gezeigte OK Fenster Ecke c
		sbwecke(1004,xeckd,0);				# gezeigte Ecke d (Wanddicke)
		sbwecke(1005,xecke,0);				# gezeigte OK Wand/Decke e		
		xeckf = xeckc; xeckf.z = xeckb.z;	# berechneter Punkt f 2. Ecke UK Fenster
		xeckg = xeckb; xeckg.z = xeckc.z;	# berechneter Punkt g 2. Ecke OK Fenster
		xhoch = xeckc.z - xeckb.z;			# Höhe WD
		xho_o = xecke.z - xeckc.z;			# Höhe Sturz 
		xho_u = xeckb.z - xecka.z;			# Höhe Brüstung   
		xho_w = xecke.z - xecka.z;			# Höhe UK Wand bis OK Wand/Decke 
	end;

# text(xeckb,xho_u);
# text(xeckc,xho_o);
	distance(xeckb,xeckf,r20);          # Länge WD
	distance(xeckc,xeckd,r21);          # Wanddicke

	if (wcoiuf = 1) then	# Anzahl Kommastellen im Dialog
   	s21 = "-8.3";
   	else if (wcoiuf = 100) then
   	s21 = "-8.1";
   	else if (wcoiuf = 1000) then
   	s21 = "-8.0";
   	end; 
      
	# Umfahrungssinn wg. drehen der Eisen 
	p1 = xeckb;
	p2 = xeckf;
	p3 = xeckc;
	CALC_AREA(1,4,r1,p4,xumfa);
		
	string_copy(txformat,"-30.30");
   	dlg_init(): #Init new Dialog
   
	TRANSLATE_TEXT(s2,32,"Wähle","");	
	TRANSLATE_TEXT(s3,1015,"Biegeform","");
	TRANSLATE_TEXT(s4,1000,"Bügel","");
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_CAT(s2," "); STRING_CAT(s2,s4);
	STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);

	#Icon
	dlg_button(0,0,"WPS_3D",0,0,0);# 0 = Path for Icons /artifex/data/bmp/wpsdemo
	                               #                   -----------------  + string
	# (row,line,Iconname,Iconwide,Iconhigh,Icon Nr)
	dlg_button(1,2,"3D_WD_01",14,5,-1);# Button Nr 1 (less 0 means Icon )
	dlg_button(14,2,"3D_WD_02",14,5,-2);# Button Nr 2 (less 0 means Icon )
	dlg_button(28,2,"3D_WD_03",14,5,-3);# Button Nr 3 (less 0 means Icon )

	TRANSLATE_TEXT(s1,22,"Sturz",txformat);
	dlg_start(s1,i5); # 0= OK;  -1=Cancel;  > 0 =Button Number
	if( i5 < 0) then exit;

	# gewählte Bügelform
	if(i5 = 1) then begin
		xform = "A3"; 
	end;
	if(i5 = 2) then begin
		xform = "B2"; 
	end;
	if(i5 = 3) then begin
		xform = "B4"; 
	end;

	dlg_init(): #Init new Dialog 

	TRANSLATE_TEXT(s1,25,"Abmessungen","");
	STRING_COPY(s2,s1);  STRING_CAT(s2,":  "); STRING_CAT(s2,r20,s21);
	STRING_CAT(s2," / "); STRING_CAT(s2,xhoch,s21); STRING_CAT(s2," / "); STRING_CAT(s2,r21,s21);
			dlg_label(1,1,s2,45); 

	TRANSLATE_TEXT(s1,1001,"Betondeckung",txformat);			dlg_editbox(1,2,s1,xbetde,10);

	TRANSLATE_TEXT(s2,1003,"Durchmesser","");
	TRANSLATE_TEXT(s3,1016,"Wandbewehrung","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,3,s1,xd_w,10);

	TRANSLATE_TEXT(s2,1002,"Abstand","");	
	TRANSLATE_TEXT(s3,1000,"Bügel","");
	TRANSLATE_TEXT(s4,21,"oben","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); 	STRING_CAT(s2," "); STRING_CAT(s2,s4); 
	STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);	
		dlg_editbox(1,4,s1,xabs_bo,10);

	TRANSLATE_TEXT(s2,1003,"Durchmesser","");	
	TRANSLATE_TEXT(s3,1000,"Bügel","");
	TRANSLATE_TEXT(s4,21,"oben","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); 	STRING_CAT(s2," "); STRING_CAT(s2,s4); 
	STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);	
		dlg_editbox(1,5,s1,xd_bo,10);

	TRANSLATE_TEXT(s2,1004,"Anzahl",""); 
	TRANSLATE_TEXT(s3,1006,"Längseisen","");
	TRANSLATE_TEXT(s4,21,"oben","");	
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_CAT(s2," "); STRING_CAT(s2,s4);
	STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,6,s1,xanz_lo,10);
		
	TRANSLATE_TEXT(s2,1003,"Durchmesser","");
	TRANSLATE_TEXT(s3,1006,"Längseisen","");
	TRANSLATE_TEXT(s4,21,"oben","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3);  STRING_CAT(s2," "); STRING_CAT(s2,s4);
	STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,7,s1,xd_lo,10);		

	TRANSLATE_TEXT(s2,1002,"Abstand","");
	TRANSLATE_TEXT(s3,1005,"Steckeisen","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,8,s1,xabs_b,10)
	
	TRANSLATE_TEXT(s2,1003,"Durchmesser","");
	TRANSLATE_TEXT(s3,1005,"Steckeisen","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,9,s1,xd_b,10);

	TRANSLATE_TEXT(s3,1005,"ls Steckeisen","");
	STRING_COPY(s2,"ls "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,10,s1,xueb_st,10);

	TRANSLATE_TEXT(s2,1004,"Anzahl",""); 
	TRANSLATE_TEXT(s3,1006,"Längseisen","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,11,s1,xanz_l,10);

	TRANSLATE_TEXT(s2,1003,"Durchmesser","");
	TRANSLATE_TEXT(s3,1006,"Längseisen","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,12,s1,xd_l,10);
	
	TRANSLATE_TEXT(s3,1006,"ls Längseisen","");
	STRING_COPY(s2,"ls "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,13,s1,xverank,10);

	TRANSLATE_TEXT(s1,31,"Wandaussparung",txformat); 
	dlg_start(s1,i5); # 0= OK;  -1=Cancel;  > 0 =Button Number
	if( i5 < 0) then exit;

	xd_b_ber = xd_b / 1000.0 * WCOIUF;	# Durchm Bügel für Berechnung
	xd_l_ber = xd_l / 1000.0 * WCOIUF;	# Durchm Längseis. für Berechnung
	xd_w_ber = xd_w / 1000.0 * WCOIUF;	# Durchm Wandbew. für Berechnung
	   
	STABZEI  = 1;     POSNRZEI=0;     VERTEILZEI=0;
	VTLABST=0.5*WCOIUF;  
	VLPOSZEI = 0;     ANSICHT=2;
	HAKENVORN= 0;	  HAKENHINT=0;
    POSANZAHL= 1;     BTANZAHL=1;     BWLAGE=1;
    TEXTABST = 0.0;
	STABSPIEG= 0;     STABKREIS=6;  
	BOGEN    = 0;     POSNRLI=0;
	STABZEIFAK= 1.0;  POSDREWI=0.0;


		if(xumfa = 1) then 	begin
			p3 = p1;
			p1 = p2;
			p2 = p3;
		end;

		# Bewehrung unten + oben

		distance(xeckb,xeckf,xlen_k)
		angle(xeckb,xeckf,xwi_k);
		r1 = PI / 2.0;
		xwi_a = xwi_k - r1;

		# Stecker unten
	if(xho_u > (0.10 * WCOIUF)) then begin # nur wenn Brüstung > 10cm
		BWFORM("A3");
		DURCHM   = xd_b;
		ABSTAND  = xabs_b;
		r1 = 2.0 * xbetde;
		PARA_B = r21 - r1 - (xd_w_ber * 2.0);
		PARA_A = xho_u - (xbetde * 2.0);
		PARA_C = PARA_A;
	if(xho_u > (0.99 * WCOIUF)) then begin
		PARA_A = xueb_st;
		PARA_C = xueb_st;
	end;	
		ANZAHL  = (xlen_k / ABSTAND);
		r1 = (ANZAHL - 1) * ABSTAND; 
		r2 = xlen_k - r1;
		if(r2 > ABSTAND) then begin ANZAHL = ANZAHL + 1; end;
	stabmod();

		STABECKE=3;
		STABEIWI=-90.0;     STABEIWI_Y=-90.0;     STABEIWI_X=180.0;
		VERLEGEWINKEL   = xwi_k * 180.0/PI;
		VERLEGEWINKEL_Z = 0.0;
		STABANF=xeckb;
		r1 = (anzahl-1) * abstand;
		r1 = r1 - xlen_k;
		r1 = r1 / -2.0;
		stabanf.z = stabanf.z - xbetde;
		polar(stabanf,xwi_k, + r1,stabanf);
		polar(stabanf,xwi_a, - xbetde - xd_w_ber,stabanf);
		LAGEPOSNR=p1;
		polar(LAGEPOSNR,xwi_a,1.5*WCOIUF,LAGEPOSNR);
	stabgeo();
	end;

		# Stecker/Bügel oben
		BWFORM(xform);
		DURCHM   = xd_bo;
		ABSTAND  = xabs_bo;
		r1 = 2.0 * xbetde;
	if(xform = "A3") then begin
		PARA_B = r21 - r1 - (xd_w_ber * 2.0);
		PARA_A = xueb_st;
		PARA_C = xueb_st;
	end;
	if(xform = "B2") then begin
		PARA_A = r21 - r1 - (xd_w_ber * 2.0);
		PARA_B = xho_o - (xbetde * 2.0);
		PARA_C = 30.0;
		PARA_D = 0.15 * WCOIUF;
	end;		
	if(xform = "B4") then begin
		PARA_A = 0.80 * WCOIUF;
		PARA_B = xho_o - (xbetde * 2.0);
		PARA_C = r21 - r1 - (xd_w_ber * 2.0);
		PARA_D = 0.15 * WCOIUF; 
		PARA_E = 30.0;	
	end;	
		ANZAHL  = (xlen_k / ABSTAND);
		r1 = (ANZAHL - 1) * ABSTAND; 
		r2 = xlen_k - r1;
		if(r2 > ABSTAND) then begin ANZAHL = ANZAHL + 1; end;
	stabmod();

	if(xform = "A3") then begin
		STABECKE=2;
	end;
	if(xform = "B2") then begin
		STABECKE=4;
	end;
	if(xform = "B4") then begin
		STABECKE=3;
	end;	
		STABEIWI=90.0;     STABEIWI_Y=-90.0;     STABEIWI_X=180.0;
		VERLEGEWINKEL   = xwi_k * 180.0/PI;
		VERLEGEWINKEL_Z = 0.0;
		STABANF=xeckg;
		r1 = (anzahl-1) * abstand;
		r1 = r1 - xlen_k;
		r1 = r1 / -2.0;
		stabanf.z = stabanf.z + xbetde;
		polar(stabanf,xwi_k, + r1,stabanf);
		polar(stabanf,xwi_a, - xbetde - xd_w_ber,stabanf);
		LAGEPOSNR=p1;
		polar(LAGEPOSNR,xwi_a,1.5*WCOIUF,LAGEPOSNR);
	stabgeo();
		
		# Laengs unten
	if(xho_u > (0.04 * WCOIUF)) then begin # nur wenn Brüstung > 5cm
		BWFORM("A1");
		DURCHM   = xd_l;
		r2 = 2.0 * xbetde;
		r3 = xd_b_ber; # Bügeldurchmesser
		r4 = xd_l_ber; # Längseisen Durchmesser
		r6 = xd_w_ber; # Durchmesser Wandbewehrung
		r5 = r3 + r4;
		r1 = r21 - (r2+2.0*r5) - (xd_w_ber * 2.0);
		ANZAHL  = xanz_l;
		if(ANZAHL < 2)then ANZAHL = 2;
		ABSTAND  = r1 / (anzahl-1);
		PARA_A = xlen_k + 2.0 * xverank;
	stabmod();

		STABECKE=1;
		r1 = xwi_k * 180.0 / PI;
		STABEIWI=180; STABEIWI_Y=270.0;     STABEIWI_X=-90;
		VERLEGEWINKEL   = r1 + 90.0;
		VERLEGEWINKEL_Z = 0.0;
		STABANF=xeckb;
		stabanf.z = stabanf.z - r5 - xbetde;
		polar(stabanf,xwi_k, xverank*-1.0,stabanf);
		polar(stabanf,xwi_a, -(xbetde+r5) - xd_w_ber,stabanf);
		
		LAGEPOSNR=p1;
		polar(LAGEPOSNR,xwi_a,0.5*WCOIUF,LAGEPOSNR);
	stabgeo();
	end;
	
		# Laengs oben
		BWFORM("A1");
		DURCHM   = xd_lo;
		r2 = 2.0 * xbetde;
		r3 = xd_b_ber; # Bügeldurchmesser
		r4 = xd_l_ber; # Längseisen Durchmesser
		r6 = xd_w_ber; # Durchmesser Wandbewehrung
		r5 = r3 + r4;
		r1 = r21 - (r2+2.0*r5) - (xd_w_ber * 2.0);
		ANZAHL  = xanz_lo;
		if(ANZAHL < 2)then ANZAHL = 2;
		ABSTAND  = r1 / (anzahl-1);
		PARA_A = xlen_k + 2.0 * xverank;
	stabmod();

		STABECKE=1;
		r1 = xwi_k * 180.0 / PI;
		STABEIWI=180; STABEIWI_Y=270.0;     STABEIWI_X=-90;
		VERLEGEWINKEL   = r1 + 90.0;
		VERLEGEWINKEL_Z = 0.0;
		STABANF=xeckg;
		stabanf.z = stabanf.z + r5 + xbetde;
		polar(stabanf,xwi_k, xverank*-1.0,stabanf);
		polar(stabanf,xwi_a, -(xbetde+r5) - xd_w_ber,stabanf);
		
		LAGEPOSNR=p1;
		polar(LAGEPOSNR,xwi_a,0.5*WCOIUF,LAGEPOSNR);
	stabgeo();

		# Bewehrung rechts + links

		# Stecker rechts
		BWFORM("A3");
		DURCHM   = xd_b;
		ABSTAND  = xabs_b;
		r1 = 2.0 * xbetde;
		PARA_B = r21 - r1;
		PARA_A = xueb_st;
		PARA_C = xueb_st;
		ANZAHL  = (xhoch / ABSTAND);
		r1 = (ANZAHL - 1) * ABSTAND; 
		r2 = xhoch - r1;
		if(r2 > ABSTAND) then begin ANZAHL = ANZAHL + 1; end;
	stabmod();

		STABECKE=3;
		STABEIWI=-90.0;     STABEIWI_Y=-90.0;     STABEIWI_X=180.0;
		VERLEGEWINKEL   = xwi_k * 180.0/PI;
		VERLEGEWINKEL_Z = 90.0;
		STABANF=xeckf;
		r1 = (anzahl-1) * abstand;
		r1 = r1 - xhoch;
		r1 = r1 / -2.0;
		stabanf.z = stabanf.z + r1;
		polar(stabanf,xwi_k, + xbetde,stabanf);
		polar(stabanf,xwi_a, - xbetde ,stabanf);
		LAGEPOSNR=p1;
		polar(LAGEPOSNR,xwi_a,1.5*WCOIUF,LAGEPOSNR);
	stabgeo();
	
		# Stecker links
	stabmod();

		STABECKE=2;
		STABEIWI=90.0;     STABEIWI_Y=-90.0;     STABEIWI_X=180.0;
		VERLEGEWINKEL   = xwi_k * 180.0/PI;
		VERLEGEWINKEL_Z = 90.0;
		STABANF=xeckb;
		r1 = (anzahl-1) * abstand;
		r1 = r1 - xhoch;
		r1 = r1 / -2.0;
		stabanf.z = stabanf.z + r1;
		polar(stabanf,xwi_k, - xbetde,stabanf);
		polar(stabanf,xwi_a, - xbetde ,stabanf);
		LAGEPOSNR=p1;
		polar(LAGEPOSNR,xwi_a,1.5*WCOIUF,LAGEPOSNR);
	stabgeo();	

		angle(xeckb,xeckf,xwi_k);
		r1 = PI / 2.0;
		xwi_a = xwi_k - r1;

		# Laengs rechts
		BWFORM("A1");
		DURCHM   = xd_l;
		r2 = 2.0 * xbetde;
		r3 = xd_b_ber; # Bügeldurchmesser
		r4 = xd_l_ber; # Längseisen Durchmesser
		r5 = r3 + r4;
		r1 = r21 - (r2+2.0*r5);
		ANZAHL  = xanz_l;
		if(ANZAHL < 2)then ANZAHL = 2;
		ABSTAND  = r1 / (anzahl-1);
		PARA_A = xhoch + 2.0 * xverank;
	if(xho_u < xverank) then begin
		PARA_A = xho_w - xbetde;
	end;	
	stabmod();

		STABECKE=1;
		r1 = xwi_k * 180.0 / PI;
		STABEIWI= -90; STABEIWI_Y=270.0;     STABEIWI_X=-90;
		VERLEGEWINKEL   = r1 + 90.0;
		VERLEGEWINKEL_Z = 0.0;
		STABANF=xeckf;
		stabanf.z = stabanf.z - xverank;
	if(xho_u < xverank) then begin
		STABANF=xeckf;
		stabanf.z = xecka.z;
	end;
		polar(stabanf,xwi_k,(xbetde + r5),stabanf);
		polar(stabanf,xwi_a, - (xbetde + r5),stabanf);
		
		LAGEPOSNR=p1;
		polar(LAGEPOSNR,xwi_a,0.5*WCOIUF,LAGEPOSNR);
	stabgeo();

		# Laengs links

	stabmod();

		STABECKE=1;
		r1 = xwi_k * 180.0 / PI;
		STABEIWI= -90; STABEIWI_Y=270.0;     STABEIWI_X=-90;
		VERLEGEWINKEL   = r1 + 90.0;
		VERLEGEWINKEL_Z = 0.0;
		STABANF=xeckb;
		stabanf.z = stabanf.z - xverank;
	if(xho_u < xverank) then begin
		STABANF=xeckb;
		stabanf.z = xecka.z;
	end;
		polar(stabanf,xwi_k, - (xbetde + r5),stabanf);
		polar(stabanf,xwi_a, - (xbetde + r5),stabanf);
		
		LAGEPOSNR=p1;
		polar(LAGEPOSNR,xwi_a,0.5*WCOIUF,LAGEPOSNR);
	stabgeo();

restore_fsm();
end.
