MCVSIStandard Houses Miscellaneouse-R1Standard HousesgClick to insert.@`@P^x@@_@N@@\@ear Obje" @@@@CCC@@@@ 9 R k3L StoreyHeight3 StoreyCount3Length10Depth8RoofType1 RoofAngle30Material0.002 DoorWidth0.9 DoorHeight2.1DoorSide2 DoorPosition0.3 WindowLower0.9 WindowUpper2.1Opening0.6 WindowCount4{ Abwicklung Haus } PROCEDURE GenerateHouse; CONST Distance=1; VAR StoreyHeight:REAL; StoreyCount:INTEGER; Length:REAL; Depth:REAL; RoofType:INTEGER; {0: Flachdach 1: Satteldach 2: Pultdach} RoofAngle:REAL; Material:REAL; Flat:INTEGER; Sattel:INTEGER; Pult:INTEGER; DoorWidth:REAL; DoorHeight:REAL; DoorSide:INTEGER; {1-4} DoorPosition:REAL; {0=left, 1=right} RealDoorP:REAL; DoorBottom:REAL; WindowLower:REAL; {0-1} WindowUpper:REAL; {0-1} Opening:REAL; {0-1} WindowCount:INTEGER; WindowWidth:REAL; BetweenWidth:REAL; i, k:INTEGER; BEGIN {assign parameters} StoreyHeight:=PSTOREYHEIGHT; StoreyCount:=PSTOREYCOUNT; Length:=PLENGTH; Depth:=PDEPTH; RoofType:=PROOFTYPE; RoofAngle:=PROOFANGLE; Material:=PMATERIAL; DoorWidth:=PDOORWIDTH; DoorHeight:=PDOORHEIGHT; DoorSide:=PDOORSIDE; DoorPosition:=PDOORPOSITION; WindowLower:=PWINDOWLOWER; WindowUpper:=PWINDOWUPPER; Opening:=POPENING; WindowCount:=PWINDOWCOUNT; Material:=Material*GetLScale(ActLayer); IF DoorSide Mod 2 = 1 THEN RealDoorP:= (Length-2*Material-DoorWidth)*DoorPosition+Material ELSE ReaLDoorP := (Depth-DoorWidth-2*Material)*DoorPosition; IF DoorSide = 2 THEN RealDoorP:=RealDoorP+Distance+Length ELSE IF DoorSide = 4 THEN RealDoorP:=RealDoorP+2*Distance+Length+Depth-2*Material; IF DoorSide = 3 THEN DoorBottom:=StoreyHeight*StoreyCount+Distance ELSE DoorBottom:=0; WindowWidth:=1/(WindowCount+(WindowCount+1)*(1-Opening)); BetweenWidth:=WindowWidth*(1-Opening); {assign RoofType} Flat:=0; Sattel:=0; Pult:=0; IF RoofType = 0 THEN Flat:= 1 ELSE IF RoofType = 1 THEN Sattel:=1 ELSE Pult:=1; {SideWalls} Rect(0,0,Length, StoreyHeight*StoreyCount); Rect(0,StoreyHeight*StoreyCount+Distance, Length, 2*StoreyHeight*StoreyCount+Distance+Pult*(Depth-Material)*tan(RoofAngle*pi/180)); {front walls} MoveTo(Length+Distance, 0); LineTo(Length+Distance+ Depth-2*Material,0); LineTo(Length+Distance+ Depth-2*Material,StoreyHeight*StoreyCount+(Pult+Sattel)*Material*tan(RoofAngle*pi/180)); LineTo(Length+Distance+ Depth/2-Material,StoreyHeight*StoreyCount+(Pult+Sattel)*(Depth/2)*tan(RoofAngle*pi/180)); LineTo(Length+Distance, StoreyHeight*StoreyCount+Sattel*Material*tan(RoofAngle*pi/180)+Pult*(Depth-2*Material)*tan(RoofAngle*pi/180)); LineTo(Length+Distance, 0); MoveTo(Length+2*Distance+ Depth-2*Material, 0); LineTo(Length+2*Distance+ Depth-2*Material+ Depth-2*Material,0); LineTo(Length+2*Distance+ Depth-2*Material+ Depth-2*Material,StoreyHeight*StoreyCount+(Pult+Sattel)*Material*tan(RoofAngle*pi/180)+Pult*(Depth-2*Material)*tan(RoofAngle*pi/180)); LineTo(Length+2*Distance+ Depth-2*Material+ Depth/2-Material,StoreyHeight*StoreyCount+(Pult+Sattel)*(Depth/2)*tan(RoofAngle*pi/180)); LineTo(Length+2*Distance+ Depth-2*Material, StoreyHeight*StoreyCount+Sattel*Material*tan(RoofAngle*pi/180)); LineTo(Length+2*Distance+ Depth-2*Material, 0); {Roof} IF Flat=1 THEN Rect(Length+3*Distance+Depth-2*Material+ Depth-2*Material,0,Length+3*Distance+Depth-2*Material+ Depth-2*Material+Depth,Length); IF Pult=1 THEN Rect(Length+3*Distance+Depth-2*Material+ Depth-2*Material,0,Length+3*Distance+Depth-2*Material+ Depth-2*Material+Depth/cos(RoofAngle*pi/180),Length); IF Sattel=1 THEN BEGIN Rect(Length+3*Distance+Depth-2*Material+ Depth-2*Material,0,Length+3*Distance+Depth-2*Material+ Depth-2*Material+(Depth/cos(RoofAngle*pi/180))/2,Length); Rect(Length+3*Distance+Depth-2*Material+ Depth-2*Material+(Depth/cos(RoofAngle*pi/180))/2+Distance,0,Length+3*Distance+Depth-2*Material+ Depth-2*Material+Distance+Depth/cos(RoofAngle*pi/180),Length); END; {Doors} MoveTo(RealDoorP, DoorBottom); LineTo(RealDoorP, DoorHeight+DoorBottom); LineTo(RealDoorP+DoorWidth, DoorHeight+DoorBottom); LineTo(RealDoorP+DoorWidth, DoorBottom); {Windows} IF StoreyCount>0 THEN BEGIN For k:= 0 To StoreyCount-1 DO BEGIN FOR i:= 0 TO WindowCount-1 DO BEGIN IF (k<>0) OR (doorside<>1) THEN Rect((i*WindowWidth+(i+1)*BetweenWidth)*(Length-2*Material)+Material,StoreyHeight*k+WindowLower, BetweenWidth+((i+1)*(WindowWidth+BetweenWidth))*(Length-2*Material)+Material,StoreyHeight*k+WindowUpper); IF (k<>0) OR (doorside<>3) THEN Rect((i*WindowWidth+(i+1)*BetweenWidth)*(Length-2*Material)+Material,StoreyHeight*k+WindowLower+StoreyHeight*StoreyCount+Distance, BetweenWidth+((i+1)*(WindowWidth+BetweenWidth))*(Length-2*Material)+Material,StoreyHeight*k+WindowUpper+StoreyHeight*StoreyCount+Distance); IF (k<>0) OR (doorside<>2) THEN Rect((i*WindowWidth+(i+1)*BetweenWidth)*(Depth-2*Material)+Length+Distance,StoreyHeight*k+WindowLower, BetweenWidth+((i+1)*(WindowWidth+BetweenWidth))*(Depth-2*Material)+Length+Distance,StoreyHeight*k+WindowUpper); IF (k<>0) OR (doorside<>4) THEN Rect((i*WindowWidth+(i+1)*BetweenWidth)*(Depth-2*Material)+Length+2*Distance+ Depth-2*Material,StoreyHeight*k+WindowLower, BetweenWidth+((i+1)*(WindowWidth+BetweenWidth))*(Depth-2*Material)+Length+2*Distance+ Depth-2*Material,StoreyHeight*k+WindowUpper); END; END; END; END; RUN(GenerateHouse);