# Eingabe eines quadratischen Einzelfundaments mit Stützenanschluss
# 3D Bauteil 2021-03-11 LF

save_fsm();

# Integervariablen
name(i60,"xd_la");		xd_la = 14;	# Durchmesser Längseisen Länge X
name(i61,"xd_br");		xd_br = 14;	# Durchmesser Längseisen Länge Y
name(i62,"xd_an");		xd_an = 14;	# Durchmesser Stützenanschluss
name(i63,"xd_bu");		xd_bu = 8;	# Durchmesser Stützenbügel
name(i64,"xd_mo");		xd_mo = 10,	# Durchmesser Montageeisen
name(i65,"xanz_la");				# Anzahl Längseisen Länge X
name(i66,"xanz_br");				# Anzahl Längseisen Länge Y
name(i71,"xumfa");		xumfa = 0;	# Umfahrungssinn 0=math.Positiv(Gegenuhrteigersinn)  1=math.Negativ
# Realvariablen 
name(r60,"xmstab");		xmstab = wcoiuf / 100;		# Allgemeine Maßstabsumrechnung
name(r61,"xbetde");		xbetde = 4.5 * xmstab;		# Betonüberdeckung Fundament
name(r62,"xbetst");		xbetst = 2.5 * xmstab;		# Betonüberdeckung Fundament
name(r63,"xfu_la");		xfu_la = 120.0 * xmstab;	# Fundamentlänge x
name(r64,"xfu_br");		xfu_br = 120.0 * xmstab;	# Fundamentbreite y   
name(r65,"xfu_ho");		xfu_ho = 80.0 * xmstab;		# Fundamenthöhe z
name(r66,"xst_la");		xst_la = 25.0 * xmstab;		# Stützenlänge x
name(r67,"xst_br");		xst_br = 25.0 * xmstab;		# Stützenbreite y
name(r68,"xwi_la");									# Winkel in Fund-Länge
name(r69,"xwi_br");									# Winkel in Fund-Breite
name(r70,"xd_la_ber");	xd_la_ber = xd_la/1000*WCOIUF;	# Durchmesser in Eing-Einheit für Abstandsberechnungen
name(r71,"xd_br_ber");	xd_br_ber = xd_an/1000*WCOIUF;
name(r72,"xd_an_ber");	xd_an_ber = xd_an/1000*WCOIUF;
name(r73,"xd_bu_ber");	xd_bu_ber = xd_bu/1000*WCOIUF;
name(r74,"xueb_an");	xueb_an = 60.0 * xmstab;	# ls Stützenanschluss
name(r75,"xabst_la");	xabst_la = 15.0 * xmstab;	# Abstand Längseisen Richtung X
name(r76,"xabst_br");	xabst_br = 15.0 * xmstab;	# Abstand Längseisen Richtung Y
name(r77,"xabst_bu");	xabst_bu = 25.0 * xmstab;	# Durchmesser Stützenbügel
# Punktvariablen
name(p60,"xecka");		# Diagonale 1 unten 
name(p61,"xeckb");		# Diagonale 2 unten 
name(p62,"xeckc");		# Höhe 3 oben 
name(p63,"xeckd");		# Diagonale 1 Stütze unten
name(p64,"xecke");		# Diagonale 2 Stütze unten
name(p65,"stabanf");
# Textvariablen
name(s60,"txformat");

	# Aufruf aus 3D Bauteilbewehrung->Punkte sind vorgegeben.    
	if(DREIDBAUTEIL = 1) then 
		begin 
		sbwecke(1001,xecka,0); # Diag Fu vo li unt
		sbwecke(1002,xeckb,0); # Diag Fu hi re unt
		sbwecke(1003,xeckc,0); # Ecke Fu vo re ob
		sbwecke(1004,xeckd,0); # Diag St vo li unt
		sbwecke(1005,xecke,0); # Diag St hi re unt
		xfu_ho = xeckc.z - xecka.z; # Fundamenthöhe
		if(xfu_ho < 0.0)then xfu_ho = xfu_ho * -1.0;
	end;
	
	# Umfahrungssinn wg. drehen der Eisen 
	p1 = xecka;
	p2 = xeckb;
	p3 = xeckc;
	CALC_AREA(1,3,r1,p4,xumfa);
	
	# Abmessungen errechnen *******************************
	
	angle(xecka,xeckc,r1);              # Winkel p2-p3 Fu Vorderkante
	distance(xecka,xeckb,r20);          # Kathete Fund rechnen (p1-p3)
	distance(xeckd,xecke,r21);          # Kathete Stütze rechnen (p4-p5)

	rotate_point(xeckc,xecka,-r1);      # Punkt 3 auf horizontal drehen1
	rotate_point(xeckb,xecka,-r1);		# Punkt 2 dto.
	rotate_point(xeckd,xecka,-r1);		# Punkt 5 dto.
	rotate_point(xecke,xecka,-r1); 		# Punkt 6 dto.

	angle(xecka,xeckb,r2);	# Winkel p1-p2 rechnen für Fu Länge und Breite
	sin(r2,r10),
	cos(r2,r11);
	angle(xeckd,xecke,r3);	# Winkel p5-p6 rechnen für ST Länge und Breite
	sin(r3,r12),
	cos(r3,r13);

	xfu_la = r20 * r11);	# Länge Gegenkathete = Fundamentlänge
	xfu_br = r20 * r10);	# Länge Ankathete = Fundamentbreite
	xst_la = r21 * r13);	# Länge Gegenkathete = Stüzenlänge
	xst_br = r21 * r12);	# Länge Ankathete = Stützenbreite	
	
	rotate_point(xeckc,xecka,+r1);      # gedrehte Punkte zurück drehen
	rotate_point(xeckb,xecka,+r1);
	rotate_point(xeckd,xecka,+r1);
	rotate_point(xecke,xecka,+r1); 

	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;   	   	

    TRANSLATE_TEXT(s1,-1,"WCO_SBW","");	# aktiviert übersetzte Texte aus Datei	
	
	string_copy(txformat,"-30.30");
   	
   	dlg_init(): #Init new Dialog

	TRANSLATE_TEXT(s1,27,"Fundament","");
	STRING_COPY(s2,s1);  STRING_CAT(s2,":  "); STRING_CAT(s2,xfu_la,s21);
	STRING_CAT(s2," / "); STRING_CAT(s2,xfu_br,s21); STRING_CAT(s2," / "); STRING_CAT(s2,xfu_ho,s21);
			dlg_label(1,1,s2,40); 
 
	TRANSLATE_TEXT(s1,8,"Stütze","");
	STRING_COPY(s2,s1);  STRING_CAT(s2,":  "); STRING_CAT(s2,xst_la,s21);
	STRING_CAT(s2," / "); STRING_CAT(s2,xst_br,s21); 
		dlg_label(1,2,s2,30); 

	TRANSLATE_TEXT(s2,1001,"Betondeckung","");	
	TRANSLATE_TEXT(s3,27,"Fundament","");
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,3,s1,xbetde,10);

	TRANSLATE_TEXT(s2,1001,"Betondeckung","");	
	TRANSLATE_TEXT(s3,8,"Stütze","");
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,4,s1,xbetst,10);

	TRANSLATE_TEXT(s2,1011,"Stababstand","");	
	TRANSLATE_TEXT(s3,16,"Länge","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);	
		dlg_editbox(1,5,s1,xabst_la,10);

	TRANSLATE_TEXT(s2,1003,"Durchmesser",""); 
	TRANSLATE_TEXT(s3,16,"Länge","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,6,s1,xd_la,10);

	TRANSLATE_TEXT(s2,1011,"Stababstand","");
	TRANSLATE_TEXT(s3,12,"Breite","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,7,s1,xabst_br,10);

	TRANSLATE_TEXT(s2,1003,"Durchmesser",""); 
	TRANSLATE_TEXT(s3,12,"Breite","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,8,s1,xd_la,10);

	TRANSLATE_TEXT(s2,1003,"Durchmesser",""); 
	TRANSLATE_TEXT(s3,1012,"Montagestäbe","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,9,s1,xd_mo,10);
		
	TRANSLATE_TEXT(s2,1003,"Durchmesser",""); 
	TRANSLATE_TEXT(s3,1013,"Anschlussstäbe","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,10,s1,xd_an,10);

	TRANSLATE_TEXT(s3,1013,"Anschlussstäbe",""); 
	STRING_COPY(s2,"ls "); STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,11,s1,xueb_an,10);
		
	TRANSLATE_TEXT(s2,1002,"Abstand",""); 
	TRANSLATE_TEXT(s3,1000,"Bügel","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,12,s1,xabst_bu,10);

	TRANSLATE_TEXT(s2,1003,"Durchmesser",""); 
	TRANSLATE_TEXT(s3,1000,"Bügel","");	 
	STRING_CAT(s2," "); STRING_CAT(s2,s3); STRING_COPY(s1,""); STRING_CAT(s1,s2,txformat);
		dlg_editbox(1,13,s1,xd_bu,10);		
	
	TRANSLATE_TEXT(s1,27,"Fundament",""); 
	
	dlg_start(s1,i5); # 0= OK;  -1=Cancel;  > 0 =Button Number
	if( i5 < 0) then exit;

		# Bewehrung ***********

	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;

		# 	Untere Lage in Fundamentlänge *********
		
BWFORM("A3");

# Stabanzahl rechnen
	r33 = xfu_la - (2 * xbetde) - (2 * xd_la_ber); xanz_la = r33 / xabst_la + 1;
	r34 = xfu_la - ((xanz_la - 1) * xabst_la); 
    r34 = r34 / 2.0;	

    Anzahl = xanz_la;
	Abstand = xabst_la;
	Durchm = xd_la;
# Parameter berechnen
	para_a = xfu_ho * 0.68; i34 = xfu_ho; xfu_ho = i34; 
	para_b= xfu_br - (xbetde * 2.0); para_c = para_a;
stabmod();
	
	STABECKE = 2;
	STABEIWI = 90.0;     STABEIWI_Y = -90.0;     STABEIWI_X = 180.0;
	VERLEGEWINKEL   = r1 * 180.0 / PI;
	VERLEGEWINKEL_Z = 0.0;
	STABANF = xecka; 
	polar(stabanf,r1,r34,stabanf);
	stabanf.z = stabanf.z + xbetde;
	polar(stabanf,(r1 + (PI / 2)),xbetde,stabanf);
	LAGEPOSNR = xecka;
	polar(LAGEPOSNR,r1 + PI,1.5 * WCOIUF,LAGEPOSNR);
stabgeo();	

		# 	Untere Lage in Fundamentbreite *********

# Stabanzahl rechnen
	r33 = xfu_br - (2 * xbetde) - (2 * xd_br_ber); xanz_br = r33 / xabst_br + 1;
	r34 = xfu_br - ((xanz_br - 1) * xabst_br); 
    r34 = r34 / 2.0;	

    Anzahl = xanz_br;
	Abstand = xabst_br;
	Durchm = xd_br;
# Parameter berechnen
	para_a = xfu_ho * 0.68; i34 = xfu_ho; xfu_ho = i34; 
	para_b= xfu_la - (xbetde * 2.0); para_c = para_a;
stabmod();

	STABECKE = 2;
	STABEIWI = 90.0;     STABEIWI_Y = -90.0;     STABEIWI_X = 180.0;
	VERLEGEWINKEL   = VERLEGEWINKEL + 90;
	VERLEGEWINKEL_Z = 0.0;
	p1 = xeckc; p1.z = xecka.z; STABANF = p1; 
	polar(stabanf,(r1 + (PI / 2)),r34,stabanf);
	stabanf.z = stabanf.z + xbetde + xd_la_ber;
	polar(stabanf,(r1 + PI),xbetde,stabanf);
	LAGEPOSNR = xecka;
	polar(LAGEPOSNR,r1 + PI,1.5 * WCOIUF,LAGEPOSNR);
stabgeo();	

		# 	Montageeisen ringsum *********

		# Ecken rechnen ********
	p1 = xecka;
	p2 = xeckc; p2.z = xecka.z; 
	p3 = xeckb; 
	polar(p1,(r1 + (PI / 2)),xfu_br,p4);
gst_color(1);

BWFORM("A2");
	Anzahl = 1;
	Durchm = xd_mo;
	Para_a = 50 * xmstab;
	Para_b = xfu_la - (xbetde * 2.0) - (5.0 * xmstab); 

stabmod(); # Eisen 1

	STABECKE = 2;
	STABEIWI = 0.0;     STABEIWI_Y = -90.0;     STABEIWI_X = 0.0;
	VERLEGEWINKEL   = r1 * 180.0 / PI;
	VERLEGEWINKEL_Z = 90.0;
	p1.z = p1.z + (xfu_ho * 0.67 - (10.0 * xmstab)); STABANF = p1;	
	polar(p1,r1,xbetde + xd_la_ber,stabanf);
	polar(stabanf,(r1 + (PI / 2)),xbetde + xd_la_ber,stabanf);
stabgeo();	

stabmod(); # Eisen 3

	STABECKE = 2;
	STABEIWI = 0.0;     STABEIWI_Y = -90.0;     STABEIWI_X = 0.0;
	VERLEGEWINKEL   = VERLEGEWINKEL + 180;
	VERLEGEWINKEL_Z = 90.0;
	p3.z = p3.z + (xfu_ho * 0.67 - (10.0 * xmstab)); STABANF = p3;	
	polar(p3,r1,- (xbetde + xd_la_ber),stabanf);
	polar(stabanf,(r1 + (PI / 2)),- (xbetde + xd_la_ber),stabanf);
stabgeo();	

	Para_b = xfu_br - (xbetde * 2.0) - (5.0 * xmstab); 
	
stabmod(); # Eisen 2

	STABECKE = 2;
	STABEIWI = 0.0;     STABEIWI_Y = -90.0;     STABEIWI_X = 0.0;
	VERLEGEWINKEL   =  r1 * 180.0 / PI; VERLEGEWINKEL = VERLEGEWINKEL + 90;
	VERLEGEWINKEL_Z = 90.0;
	p2.z = p2.z + (xfu_ho * 0.67 - (12.0 * xmstab)); Stabanf = p2;	
	polar(p2,r1,- (xbetde + xd_la_ber),stabanf);
	polar(stabanf,(r1 + (PI / 2)),xbetde + xd_la_ber,stabanf);
stabgeo();		

				

stabmod(); # Eisen 4

	STABECKE = 2;
	STABEIWI = 0.0;     STABEIWI_Y = -90.0;     STABEIWI_X = 0.0;
	VERLEGEWINKEL   = VERLEGEWINKEL + 180;
	VERLEGEWINKEL_Z = 90.0;
	p4.z = p4.z + (xfu_ho * 0.67 - (12.0 * xmstab)); STABANF = p4;	
	polar(p4,r1,xbetde + xd_la_ber,stabanf);
	polar(stabanf,(r1 + (PI / 2)),- (xbetde + xd_la_ber),stabanf);
stabgeo();

		# 	Stützenanschluss Bügel *********

	xbetst = 2.5 * xmstab; # Betondeckung für Stützenanschluss 2.5 cm

		# Ecken rechnen ********
	p5 = xeckd; p5.z = xecka.z;
	polar(p5,r1,xst_la,p6); 
	p7 = xecke; p7.z = xecka.z;
	polar(p5,(r1 + (PI / 2)),xst_br,p8); 
	
BWFORM("B1");  # Bügel
	Anzahl = xfu_ho / xabst_bu + 1;
	ABSTAND = xabst_bu;

	Durchm = xd_bu;
	Para_a = xst_la - (2 * xbetst);
	Para_b = xst_br - (xbetst * 2.0) - (5.0 * xmstab); # 5cm kürzer für Du Stützeneisen 
stabmod();

	STABECKE = 1;
	STABEIWI = 0;     STABEIWI_Y = -90.0;     STABEIWI_X = 0.0;
	VERLEGEWINKEL   = r1 * 180.0 / PI;
	VERLEGEWINKEL_Z = 90.0;
	p7.z = p7.z + (10.0 * xmstab); STABANF = p7;	
	polar(p7,r1,- xbetst,stabanf);
	polar(stabanf,(r1 + (PI / 2)),- xbetst - (2.5 * xmstab),stabanf);
stabgeo();	

BWFORM("A2"); 
	Anzahl = 2;
	ABSTAND = xst_la - (2 * xbetst) - (2.4 * xd_an_ber); 
	Durchm = xd_an;
	Para_a = 25.0 * xmstab;
	Para_b = xfu_ho - xbetde - (2 * xd_la) + xueb_an; 

stabmod();	 # A-Eisen 1

	r31 = (xbetst + (1.2 * xd_la_ber) + (2.5 * xmstab) + xd_bu_ber);
	STABZEI=1; ANZSTABZEI=2; STABECKE = 2;
	STABEIWI = 0.0;     STABEIWI_Y = -90.0;     STABEIWI_X = 180.0;
	VERLEGEWINKEL   = r1 * 180.0 / PI;
	VERLEGEWINKEL_Z = 0.0;
	p5.z = p5.z + xbetde + (2 * xd_la_ber); STABANF = p5;	
	polar(p5,r1,xbetst + (1.2 * xd_la_ber),stabanf);
	polar(stabanf,(r1 + (PI / 2)),r31,stabanf);
stabgeo();	

stabmod(); # A-Eisen 2

	STABZEI=1; ANZSTABZEI=2; STABECKE = 2;
	STABEIWI = 0.0;     STABEIWI_Y = -90.0;     STABEIWI_X = 180.0;
	VERLEGEWINKEL   = VERLEGEWINKEL + 180;
	VERLEGEWINKEL_Z = 0.0;
	p7.z = xecka.z; p7.z = p7.z + xbetde + (2 * xd_la_ber); STABANF = p7;	
	polar(p7,r1,- xbetst - (1.2 * xd_la_ber),stabanf);
	polar(stabanf,(r1 + (PI / 2)),- r31,stabanf);
stabgeo();


restore_fsm();
end.
