|
| MAS ETH ARCH/CAAD - 2005/06 - STUDENT PAGES Master of Advanced Studies in Architecture, Specialization in Computer Aided Architectural Design | 065-0005/6 Supervision: Prof. Dr. Ludger Hovestadt, Philipp Schaerer Chair of CAAD, ETH Zurich This website has been archived and is no longer maintained. Mini-Assignment III: Make a plug-in ! PROCEDURE mousemove; VAR xold,yold,xnew,ynew:real; BEGIN getline(xold,yold,xnew,ynew); MoveObjs(xnew-xold,ynew-yold ,true,false); END; Run(mousemove);
PROCEDURE mauer; TYPE rechteck = structure breite,hoehe,halbebreite,viertelbreite,dreiviertel,max:real; x1,y1,x2,y2:real; end; VAR stein,wand:rechteck; verband:char; lagen,i,l,halb,endhalb:INTEGER; lagerfuge,stossfuge,rollfuge,tausch:real; procedure steinzeichnen (x:real;y:real;breite:real); begin rect(x,y,x+breite,y+stein.hoehe); stein.x1:=stein.x1+breite+stossfuge; end; procedure rollschicht; begin i:=trunc((wand.breite+stossfuge)/(stein.hoehe+stossfuge)); rollfuge:= (wand.breite-i*stein.hoehe)/(i-1); for l:=1 to i do begin rect(stein.x1,wand.y2+lagerfuge,stein.x1 +stein.hoehe,wand.y2+lagerfuge +stein.halbebreite); stein.x1:=stein.x1+stein.hoehe+rollfuge; end; end; procedure laeufer; begin for i:=1 to lagen do begin if i mod 2 =0 then begin steinzeichnen (stein.x1,stein.y1,stein.halbebreite); end; while ((wand.x2-stein.x1)>stein.breite) do begin steinzeichnen(stein.x1,stein.y1,stein.breite); end; steinzeichnen(stein.x1,stein.y1,wand.x2-stein.x1); stein.x1:=wand.x1; stein.y1:=wand.y1+i*(stein.hoehe+lagerfuge)+lagerfuge; end; end; procedure block; begin for i:=1 to lagen do begin if i mod 2 =0 then begin steinzeichnen (stein.x1,stein.y1,stein.viertelbreite); while ((wand.x2-stein.x1)>(stein.halbebreite)) do begin steinzeichnen(stein.x1,stein.y1,stein.halbebreite); end; steinzeichnen(stein.x1,stein.y1,wand.x2-stein.x1); end else begin while ((wand.x2-stein.x1)>stein.breite) do begin steinzeichnen(stein.x1,stein.y1,stein.breite); end; steinzeichnen(stein.x1,stein.y1,wand.x2-stein.x1); end; stein.x1:=wand.x1; stein.y1:=wand.y1+i*(stein.hoehe+lagerfuge)+lagerfuge; end; end; procedure holland; begin for i:=1 to lagen do begin if i mod 2 =0 then begin steinzeichnen (stein.x1,stein.y1,stein.viertelbreite); while ((wand.x2-stein.x1)>(stein.halbebreite)) do begin steinzeichnen(stein.x1,stein.y1,stein.halbebreite); end; steinzeichnen(stein.x1,stein.y1,wand.x2-stein.x1); end else begin steinzeichnen (stein.x1,stein.y1,stein.halbebreite); halb:=1; stein.max:=stein.halbebreite; while ((wand.x2-stein.x1)>stein.max) do begin if halb=1 then begin steinzeichnen(stein.x1,stein.y1,stein.halbebreite); halb:=0; stein.max:=stein.breite; end else begin steinzeichnen(stein.x1,stein.y1,stein.breite); halb:=1; stein.max:=stein.halbebreite; end; end; steinzeichnen(stein.x1,stein.y1,wand.x2-stein.x1); end; stein.x1:=wand.x1; stein.y1:=wand.y1+i*(stein.hoehe+lagerfuge)+lagerfuge; end; end; procedure mark; begin for i:=1 to lagen do begin halb:=0; if i mod 2 =0 then begin steinzeichnen (stein.x1,stein.y1,stein.viertelbreite); halb:=1; end else begin steinzeichnen (stein.x1,stein.y1,stein.halbebreite); end; while ((wand.x2-stein.x1)>stein.breite) do begin if halb<2 then begin steinzeichnen(stein.x1,stein.y1,stein.breite); halb:=halb+1; end else begin steinzeichnen(stein.x1,stein.y1,stein.halbebreite); halb:=0; end; end; if (halb=2) and ((wand.x2-stein.x1)>stein.halbebreite) then steinzeichnen(stein.x1,stein.y1,stein.halbebreite); steinzeichnen (stein.x1,stein.y1,wand.x2-stein.x1); stein.x1:=wand.x1; stein.y1:=wand.y1+i*(stein.hoehe+lagerfuge)+lagerfuge; end; end; procedure kreuz; begin for i:=1 to lagen do begin if i mod 2 =0 then begin steinzeichnen (stein.x1,stein.y1,stein.viertelbreite); while ((wand.x2-stein.x1)>(stein.halbebreite)) do begin steinzeichnen(stein.x1,stein.y1,stein.halbebreite); end; steinzeichnen(stein.x1,stein.y1,wand.x2-stein.x1); end else begin if (i+3) mod 4 =0 then steinzeichnen (stein.x1,stein.y1,stein.halbebreite); while ((wand.x2-stein.x1)>stein.breite) do begin steinzeichnen(stein.x1,stein.y1,stein.breite); end; steinzeichnen(stein.x1,stein.y1,wand.x2-stein.x1); end; stein.x1:=wand.x1; stein.y1:=wand.y1+i*(stein.hoehe+lagerfuge)+lagerfuge; end; end; procedure wild; begin for i:=1 to lagen do begin halb:=round(random*3); endhalb:=round(random*3)+2; if i mod 2 =0 then begin steinzeichnen (stein.x1,stein.y1,stein.viertelbreite); end; while ((wand.x2-stein.x1)>stein.breite) do begin if halb<endhalb then begin steinzeichnen(stein.x1,stein.y1,stein.breite); halb:=halb+1; end else begin steinzeichnen(stein.x1,stein.y1,stein.halbebreite); endhalb:=round(random*4)+2; halb:=0; end; end; steinzeichnen (stein.x1,stein.y1,wand.x2-stein.x1); stein.x1:=wand.x1; stein.y1:=wand.y1+i*(stein.hoehe+lagerfuge)+lagerfuge; end; end; BEGIN fillback(0,0,0); lagerfuge:=plagerfuge; stossfuge:=pstossfuge; stein.breite:=psteinbreite; stein.hoehe:=psteinhoehe; if stossfuge>stein.breite/7 then stossfuge:=stein.breite/7; stein.halbebreite:=(stein.breite-stossfuge)/2; stein.viertelbreite:=(stein.halbebreite-stossfuge)/2; verband:='l'; if pverband='Blockverband' then verband:='b'; if pverband='Läuferverband' then verband:='l'; if pverband='Holländischer Verband' then verband:='h'; if pverband='Kreuzverband' then verband:='k'; if pverband='Märkischer Verband' then verband:='m'; if pverband='Wilder Verband' then verband:='w'; (*Rechteck ins Mauerwerksmass*) wand.x1:=0; wand.y1:=-pboxwidth/2; wand.breite:=round((Plinelength-stossfuge)/(stein.breite +stossfuge))*(stein.breite +stossfuge)-stossfuge; wand.hoehe:=round(Pboxwidth/(stein.hoehe +lagerfuge))*(stein.hoehe +lagerfuge); wand.x2:=wand.x1+wand.breite; wand.y2:=wand.y1+wand.hoehe; lagen:=(wand.hoehe)/(stein.hoehe+lagerfuge); if proll then begin rect(wand.x1,wand.y1,wand.x2,wand.y2+stossfuge+stein.halbebreite); fillback(65535,65535,65535); rollschicht; end else rect(wand.x1,wand.y1,wand.x2,wand.y2); (*steine setzen*) stein.x1:=wand.x1; stein.y1:=wand.y1+lagerfuge; fillback(65535,65535,65535); case verband of 'l': laeufer; 'b': block; 'h': holland; 'k': kreuz; 'm': mark; 'w': wild; end; END; Run(mauer);
|
This website has been archived and is no longer maintained.