# Das Macro zeichnet Rundbügel aus Biegeform E2
# In Ansicht; Schnitt und einen Stahlauszug 01.10.2001 LF
# Rev. 1 31.07.2003 LF Berücksichtigung des Eingabefaktors WCOIUF
# Rev. 3 05.12.2006 LF Berücksichtigung von Betondeckung an Eingabepunkten.
# Rev. 4 06.11.2007 LF Berücksichtigung von Betondeckung an Eingabe.
# Rev. 5 21.01.2009 LF Stabdurchmesser wird berücksichtigt.
# Rev. 6 18.10.2019 LF Längsbewehrung hinzugefügt.

# Alle Macros wurden nach Kundenwuenschen erstellt
# und dienen lediglich als Beispiele
# Fuer die Richtigkeit der Macros besteht keine Haftung

save_fsm();
writeln("Rundbügel errechnen");

# Biegeform E2 modifizieren

name(r31,"ueberd");   # Überdeckung Bügel
name(r32,"rad");      # Bügelradius
name(r33,"umfang");   # Bügelumfang
name(r34,"stadurch"); # Stabdu Bügel
name(r35,"staabst");  # Stababst Bügel
name(r36,"betdeck");  # Betondeckug
name(r37,"uebdtxt");  # Text Überdeckung Bügel
name(r38,"anschllan");# Anschlusslänge Längsstäbe
name(i31,"stadurlan");# Stabdu Längseisen
name(i32,"anzlan");   # Anzahl Längsstäbe
name(r39,"abstwin");  # Variable für Rundverlegung
name(i33,"auszug");   # Anzahl Längsstäbe

#***************************************************************************
# Staebe spiegeln generell auf 0 setzen
stabspieg = 0;

# Bogenverlegung ausschalten
Bogen = 0;

# Stahlauszug ein/aus
auszug = 1;

#***************************************************************************

#***************************************************************************
#*                          BEWEHRUNG                                      *
#***************************************************************************

BWFORM("E2");

stadurch = 8;
rad = 0;
para_b = 360;
para_c = 0;
para_d = 0;
HAKENVORN = 1;
HAKENHINT = 1;
staabst = 16/100*WCOIUF;
ueberd = 20/100*WCOIUF;
betdeck = 3/100*WCOIUF;
i20 = 1;                  # Vorgabe Haken = Ja
anschllan = 80/100*WCOIUF;# Anschlusslänge Längsstäbe
stadurlan = 20;           # Du Längseisen
anzlan = 8;               # Anzahl Längsstäbe
begwi = 0;
endwi = 2*PI;

newmask("Bewehrung Bügel");

 maskinfo(1,1, "Das Macro zeichnet Rundbügel aus Biegeform E2");
 maskinfo(1,2, "Sowie die Längsbewehrung");
 maskinfo(1,3, "In Ansicht; Schnitt und einen Stahlauszug");
 maskinfo(1,4, "Alle Macros wurden nach Kundenwuenschen erstellt");
 maskinfo(1,5, "und dienen lediglich als Beispiele");
fillmask(1,7, "Stabdurchmesser Bügel (mm): ",stadurch);
 maskinfo(1,8, "Die folgenden Werte in Arbeitseinheiten (m, cm, mm)");
 maskinfo(1,9, "Wenn Bügelradius = 0 werden Punkte abgefragt.");
fillmask(1,10, "Bügeldurchmesser (brutto):  ",rad);
fillmask(1,11, "Bügelabstand :              ",staabst);
fillmask(1,12, "Länge der Stoßdeckung Bügel:",ueberd);
fillmask(1,13, "Betondeckung:               ",betdeck);
 maskinfo(1,14, "0=keine Haken 1=Haken 2=Winkelhaken 3=Schlaufen");
fillmask(1,15, "Hakenanordnung:             ",i20);
fillmask(1,16, "Stahlauszüge (1=Ja, 0=Nein) ",auszug);
domask();
if(wcoretval = -1) then 
    begin
restore_fsm();
exit.                                 # exit.    (punkt nicht vergessen ist macroabruch)
    end;

newmask("Bewehrung Längseisen");

 maskinfo(1,1, "Anzahl = 0 = keine Längseisen");
fillmask(1,2, "Anzahl Stäbe Längsbewehrung:     ",anzlan);
fillmask(1,3, "Durchmesser Stäbe Längsbew. (mm):",stadurlan);
 maskinfo(1,4, "Die folgenden Werte in Arbeitseinheiten (m, cm, mm)");
 maskinfo(1,5, "Wenn Stossdeckung = 0, Eisenende -5cm von OKD");
fillmask(1,6, "Länge Stossdeckumg ab OKD:       ",anschllan);
domask();
if(wcoretval = -1) then 
    begin
restore_fsm();
exit.                                 # exit.    (punkt nicht vergessen ist macroabruch)
    end;

if (i20 = 0) then begin # Hakenanordnung
        HAKENVORN = 0;
        HAKENHINT = 0;
        end;
if (i20 = 1) then begin
        HAKENVORN = -1;
        HAKENHINT = -1;
        end;
if (i20 = 2) then begin
        HAKENVORN = -2;
        HAKENHINT = -2;
        end;
if (i20 = 3) then begin
        HAKENVORN = -3;
        HAKENHINT = -3;
        end;

if (rad > 0) then begin
  rad = (rad / 2) - betdeck;
end;

if (rad = 0) then begin
  writeln("1. Punkt für Stützendurchmesser: ");
	read(p11);
  writeln("2. Punkt für Stützendurchmesser: ");
	read(p12);
  distance(p11,p12,r1);
  rad = (r1 / 2) - betdeck;
end;

r40 = rad + betdeck;  #Sichern für Längseisen

writeln("Verlegepunkt 1=Stütze links unten: ");
	read(p1); p10 = p1; # Eingabe + Sicherung der Originalpunkte

writeln("Verlegepunkt 2=Stütze links oben: ");
	read(p2); p20 = p2; # Eingabe + Sicherung der Originalpunkte

p40 = p1;           # Für Längseisen sichern

distance(p1,p2,r41); # Für Längseisen sichern

	umfang = rad * 2 * 3.1415927;
	r99 = 360 / umfang * ueberd;
	para_b = 360 + r99;
	para_a = rad;

uebdtxt = ueberd*100/WCOIUF; # Wert für ls-text

  angle(p1,p2,r2); # Winkel P1 - p2

# Punkte mit Betondeckung umrechnen
 polar(p10,r2,betdeck,p1); # Abstand in Verlegerichtung
p10 = p1;
polar(p10,(r2 - (Pi/2)),betdeck,p1); # Abstand rechtw. zur Verlegerichtung

 polar(p20, -r2,betdeck,p2); # Abstand gegen Verlegerichtung
p20 = p2;
polar(p20,(r2 + (Pi/2)),betdeck,p2); # Abstand rechtw. zur Verlegerichtung

  distance(p1,p2,r1);

# Verlegung mittig zw. p1 und p2
i60 = r1/staabst; 
r60 = r1 - (i60 * staabst);
r60 = r60 / 2;
p10 = p1;
 polar(p10,r2,r60,p1); # Abstand in Verlegerichtung


durchm=stadurch;
abstand=staabst;
anzahl=r1/staabst + 1;
posanzahl=1;
stabmod() ;

Stabzei=1;
verlegewinkel= 90.0 ;
posnrzei=2;
verteilzei=3;
vlposzei=4;
ansicht=1;
Stabkreis=0;
stabecke=1;
stabeiwi=-90;
verlegewinkel = r2 * 180.0 / 3.1415927;
stabanf=p1;
posnrli=0;
posdrewi=90;
vtlabst=20/100*WCOIUF;
lageposnr.x = p1.x - (40/100*WCOIUF);
lageposnr.y = p1.y + (40/100*WCOIUF);
stabgeo();

#           Bügel im Schnitt

s1 = "ls="; # Text für Überdeckungslänge
s2 = "cm";
string_cat (s1,uebdtxt,"3.1");
string_cat (s1,s2);

writeln("Mittelpunkt Schnitt für Bügel: ");
	read(p3); p30 = p3; # Mitte Schnitt für Längseisen sichern
stabanf=p3;
lageposnr.x = p3.x ;
lageposnr.y = p3.y + rad + (25/100*WCOIUF);
verlegewinkel= 90.0 ;
ansicht=3;
posnrzei=2;
verteilzei=0;
vlposzei=3;
vtlendpkt.x = stabanf.x;
vtlendpkt.y = stabanf.y + rad;
stabeiwi=0;
stabzei=5;
stabecke=3;
posnrli=0;
posdrewi=0;
sbwliste(2,"GEO_TEXT",s1,s1); #Geometrie-Zusatztext 0=Aus 1=Zeile1 2=Zeile2
stabgeo();

#           Auszug Bügel zeichnen
if (auszug = 1) then begin
writeln("Lage Stahlauszug: ");
	read(p4);  
stabanf= p4;
lageposnr.x = p4.x;
lageposnr.y = p4.y - rad - (25/100*wcoiuf);
verlegewinkel= 90.0 ;
ansicht=3;
posnrzei=8;
verteilzei=-3;
vlposzei=3;
vtlendpkt=stabanf;
stabeiwi=0;
stabzei=5;
stabecke=3;
posnrli=0;
posdrewi=0;
sbwliste(1,"GEO_TEXT",s1,s1);
stabgeo();
end;

sbwliste(0,"GEO_TEXT","",s1); # Zusatztext aus

#  *** Längsbewehrung ***

if (anzlan > 0) then begin # Keine Längseisen zeichnen

HAKENVORN = 0;
HAKENHINT = 0;

BWFORM("A1");

if (anschllan = 0) then begin
   para_a = r41 - (5.0/100*WCOIUF);
  end;

if (anschllan <> 0) then begin
   para_a = r41 + anschllan;
  end;

#           Längseisen im Schnitt
  
anzahl = anzlan;                    # Stabanzahl
begwi  = 0;                         # der Anfangswinkel, falls im bogen verlegt werden soll (Winkel an dem der erste Stab liegt !)
endwi  = (2*PI/anzahl)*(anzahl-1);  # Winkel an dem der letzte Stab liegt ! (hier Vollkreis)
abstwin = (endwi-begwi)/(anzahl-1); # selbsterstellte Variable Winkel zw. Eisen 
radius = rad - ((stadurch/10)/100*WCOIUF) - ((stadurlan/10)/100*WCOIUF); # bestimmt den Radius bei Bogenverlegung
posanzahl=1;
durchm = stadurlan;
stabmod() ;

bogen = 1;     # Rundverlegung ein
stabanf=p30;
lageposnr.x = p30.x + rad + (25/100*WCOIUF);
lageposnr.y = p30.y;
verlegewinkel= 0.0;
posnrzei=3;
verteilzei=1;
vlposzei=1;
vtlabst= rad + (12.5/100*WCOIUF);
vtlendpkt.x = stabanf.x;
vtlendpkt.y = stabanf.y + rad;
ansicht = 1;   # Aus X
Stabkreis = 1; # Kreis aus X (ansicht=1)
stabeiwi=0.0;
stabzei=1;
stabecke=1;
posnrli=0;
posdrewi=0;
stabgeo();

#           Längseisen im Ansicht

bogen = 0;     # Rundverlegung aus
p41 = p40; p41.x = p41.x + r40; # Mitte UK Stütze
r50 =0; r51 = 360 / anzahl;     # Winkel errechnen

verlegewinkel= 180.0;
ansicht = 2;   # Aus y
posnrzei = 3;
verteilzei= 0;
vlposzei=3;
Stabkreis = 0; # Kreis aus X (ansicht=1)
stabeiwi=-90.0;
stabzei=5;
stabecke=1;
posnrli=0;
posdrewi=90;

for i = 1 to anzahl do
	begin
	polar(p41,(r50 / 360) * (2 * PI),radius,p51); #Stäbe im Kreis rechnen
    r50 = r50 + r51;
    
    p53 = p41;        # Stäbe in Reihe zeichnen
    p53.x = p51.x;
    p53.y = p41.y;
    stabanf = p53;
    
    lageposnr.x = p41.x + r40 + (25/100*WCOIUF);
    lageposnr.y = p41.y + (40/100*WCOIUF);
    vtlendpkt.x = stabanf.x;
    vtlendpkt.y = lageposnr.y;

stabgeo();
end;

#           Längseisen im Stahlauszug
if (auszug = 1) then begin
bogen = 0;     # Rundverlegung aus
p41 = p40; p41.x = p41.x + (r40 * 2) + (60/100*WCOIUF); stabanf = p41;
lageposnr.x = p41.x + (25/100*WCOIUF);
lageposnr.y = p41.y + (40/100*WCOIUF);
verlegewinkel= 180.0;
ansicht = 2;   # Aus y
posnrzei = 8;
verteilzei= -3;
vlposzei=0;
vtlendpkt.x = stabanf.x;
vtlendpkt.y = stabanf.y + rad;
Stabkreis = 0; # Kreis aus X (ansicht=1)
stabeiwi=-90.0;
stabzei=5;
stabecke=1;
posnrli=0;
posdrewi=90;
stabgeo();
end; # Auszüge ja-nein
end; # Keine Längseisen zeichnen

restore_fsm();
END.
