Procedure Flat;
VAR
TF :BOOLEAN;
i,k,COUNT :INTEGER;
cRed,cGrn,cBlu :LONGINT;
BMW,BMH,BMWperim,BMHperim,CMW,CML,CMH,TEMP,TEMPX,TEMPY,CTX,CTY,SJUMP,TJUMPSEAM,TJUMP,NXTOGGLE,NXTOGGLESEAM,RUNNINGFT,TOTALAREA,SMW,SMH,SOverAllW :REAL;
ObjName,CMCLASS,CurrentCL :STRING;
JUMP :POINT;
ObjH,RecH,WallH,THandle,TempH :HANDLE;
SHandle : ARRAY[1..501] OF HANDLE;
BEGIN {MOTHER PROG}
PushAttrs;
TF:=GetCustomObjectInfo(ObjName,ObjH,RecH,WallH);
CurrentCl:=ActiveClass;
FillBack(256);
FillFore(257);
FillPat(1);
PenPatN(2);
PenSize(6);
PenBack(256);
PenFore(257);
PenPatN(2);
{ Visabilities set based on screen type }
IF PBuildMat = 'Custom' THEN BEGIN
SetParameterVisibility(ObjH,'CustBMW',True);
SetParameterVisibility(ObjH,'CustBMH',True);
END
ELSE BEGIN
SetParameterVisibility(ObjH,'CustBMW',False);
SetParameterVisibility(ObjH,'CustBMH',False);
END;
IF PCoverMat = 'Custom' THEN BEGIN
SetParameterVisibility(ObjH,'CustCoverMatW',True);
SetParameterVisibility(ObjH,'CustCoverMatL',True);
SetParameterVisibility(ObjH,'CustCoverMatH',True);
END
ELSE BEGIN
SetParameterVisibility(ObjH,'CustCoverMatW',False);
SetParameterVisibility(ObjH,'CustCoverMatL',False);
SetParameterVisibility(ObjH,'CustCoverMatH',False);
END;
IF PBuildMat = 'wood 1 x 3' THEN BEGIN BMW:=2.625"; BMH:=.75"; END;
IF PBuildMat = 'poplar 1 x 3' THEN BEGIN BMW:=2.625"; BMH:=.75"; END;
IF PBuildMat = 'plywood 1 x 3' THEN BEGIN BMW:=2.625"; BMH:=.78125"; END;
IF PBuildMat = 'wood 1 x 4' THEN BEGIN BMW:=3.5"; BMH:=.75"; END;
IF PBuildMat = 'wood 2 x 4' THEN BEGIN BMW:=3.5"; BMH:=1.5"; END;
IF PBuildMat = 'metal 1 x 1' THEN BEGIN BMW:=1"; BMH:=1"; END;
IF PBuildMat = 'metal 1.25 x 1.25' THEN BEGIN BMW:=1.25"; BMH:=1.25"; END;
IF PBuildMat = 'metal 1.25 x 2.5' THEN BEGIN BMW:=2.5"; BMH:=1.25"; END;
IF PBuildMat = 'Custom' THEN BEGIN BMW:=PCustBMW; BMH:=PCustBMH; END;
IF PBuildMatO = 'Laying down' THEN BEGIN BMWperim:=BMW; BMHperim:=BMH; END
ELSE BEGIN BMWperim:=BMH; BMHperim:=BMW; END;
IF (PBuildMat = 'wood 1 x 3')|(PBuildMat = 'wood 1 x 4')|(PBuildMat = 'wood 2 x 4') THEN BEGIN
FillFore(46529,34664,22800); {0=black}
FillBack(46529,34664,22800); {65535=white} END
ELSE BEGIN
FillFore(52428,52428,52428); {0=black}
FillBack(52428,52428,52428); {65535=white} END;
IF PBuildCorner = 'Standard flat construction' THEN BEGIN CTX:=0; CTY:=0; END;
IF PBuildCorner = 'Toggles & Rails same dimension' THEN BEGIN CTX:=BMWperim; CTY:=BMWperim; END;
IF PBuildCorner = 'Mitered corners' THEN BEGIN CTX:=BMWperim; CTY:=0; END;
IF PCoverMat = 'None' THEN BEGIN
CMW:=PFlatW; CML:=PFlatH; CMH:=0;
END;
IF PCoverMat = 'Luan 4''x8''' THEN BEGIN
CMW:=4'; CML:=8'; CMH:=.1875";
CMCLASS:='PP- Scenic Flat Covering LUAN';
cRed:=36175; cGrn:=26213; cBlu:=16253;
END;
IF PCoverMat = 'Luan 4''x10''' THEN BEGIN
CMW:=4'; CML:=10'; CMH:=.1875";
CMCLASS:='PP- Scenic Flat Covering LUAN';
cRed:=36175; cGrn:=26213; cBlu:=16253;
END;
IF PCoverMat = 'Luan covering' THEN BEGIN
CMW:=PFlatW; CML:=PFlatH; CMH:=.1875";
CMCLASS:='PP- Scenic Flat Covering LUAN';
cRed:=36175; cGrn:=26213; cBlu:=16253;
END;
IF PCoverMat = 'Fabric covering' THEN BEGIN
CMW:=PFlatW; CML:=PFlatH; CMH:=.0625";
CMCLASS:='PP- Scenic Flat Covering FABRIC';
cRed:=65535; cGrn:=65535; cBlu:=65535;
END;
IF PCoverMat = 'Custom' THEN BEGIN
CMW:=PCustCoverMatW; CML:=PCustCoverMatL; CMH:=PCustCoverMatH;
CMCLASS:='PP- Scenic Flat Covering CUSTOM';
cRed:=65535; cGrn:=65535; cBlu:=65535;
END;
IF (PCoverMat = 'Custom') & (CMW>PFlatW) THEN CMW:=PFlatW;
IF (PCoverMat = 'Custom') & (CML>PFlatH) THEN CML:=PFlatH;
{ C R E A T I N G T H E C L A S S F O R T H E C O V E R I N G M A T E R I A L }
k:=1;
TF:=True;
WHILE k<=ClassNum DO BEGIN
IF ClassList(k)=CMClASS THEN TF:=False;
k:=k+1;
END;
IF TF=True THEN BEGIN
NameClass(CMClass);
SetClLSN(CMClass,2); {Line style}
SetClPenFore(CMClass,0,0,0); {Pen fore color}
SetClPenBack(CMClass,0,0,0); {Pen back color}
SetClFPat(CMClass,2); {Fill pattern}
SetClFillFore(CMClass,cRed,cGrn,cBlu); {Fill fore color}
SetClFillBack(CMClass,cRed,cGrn,cBlu); {Fill back color}
SetClUseGraphic(CMClass,TRUE); {Use gfx attri at creation}
SetClLW(CMClass,180mm); {Line weight}
END;
NameClass(CurrentCL);
IF CMW >= PFlatW THEN BEGIN
SetParameterVisibility(ObjH,'SSpac',True);
SetParameterVisibility(ObjH,'SSpacMax',True);
END
ELSE BEGIN
SetParameterVisibility(ObjH,'SSpac',False);
SetParameterVisibility(ObjH,'SSpacMax',False);
END;
ClosePoly;
BeginXtrd(0,-BMHperim);
{BOTTOM RAIL} Poly(0+CTY,0, PFlatW-CTY,0, PFLATW-CTX,BMWperim, 0+CTX,BMWperim);
{TOP RAIL} Poly(0+CTY,PFlatH, PFlatW-CTY,PFlatH, PFLATW-CTX,PFlatH-BMWperim, 0+CTX,PFlatH-BMWperim);
{LEFT STILE} Poly(0,BMWperim-CTX, 0,PFlatH-BMWperim+CTX, BMWperim,PFlatH-BMWperim+CTY, BMWperim,BMWperim-CTY);
{RIGHT STILE} Poly(PFlatW,BMWperim-CTX, PFlatW,PFlatH-BMWperim+CTX, PFlatW-BMWperim,PFlatH-BMWperim+CTY, PFlatW-BMWperim,BMWperim-CTY);
EndXtrd;
RUNNINGFT:=2*((PFlatW-CTY)-(0+CTY))+2*((PFlatH-BMWperim+CTX)-(BMWperim-CTX));
{ D R A W I N G T H E I N T E R I O R S T I L E S }
IF PStileStyle <> 'Laying down' THEN BEGIN SMW:=BMH; SMH:=BMW; END ELSE BEGIN SMW:=BMW; SMH:=BMH; END;
IF PStileStyle = 'Standing up - double' THEN SOverAllW:=SMW*2 ELSE SOverAllW:=SMW;
IF CMW < PFlatW THEN SJUMP:=CMW ELSE {Stile spacing is based on Cover Material width}
IF PSSpac = 'Evenly' THEN
IF Round(PFlatW/PSSpacMax)=(PFlatW/PSSpacMax) THEN SJUMP:=PFlatW/(PFlatW/PSSpacMax) ELSE SJUMP:=PFlatW/(Trunc(PFlatW/PSSpacMax)+1)
ELSE SJUMP:= PSSpacMax;
JUMP.x:=SJUMP;
i:=0;
WHILE JUMP.x<PFlatW DO BEGIN
IF (JUMP.x+(.5*SOverAllW)) > (PFlatW-BMWperim) THEN JUMP.x:=PFlatW-BMWperim-(.5*SOverAllW);
IF PStileStyle = 'Standing up - double' THEN BEGIN { CREATING A DOUBLE STILE }
BeginXtrd(0,-SMH);
{INTERNAL STILE1} Poly(Jump.x-(SMW),BMWperim, Jump.x-(SMW),PFlatH-BMWperim, Jump.x,PFlatH-BMWperim, Jump.x,BMWperim);
EndXtrd;
i:=i+1;
SHandle:=LNewObj;
BeginXtrd(0,-SMH);
{INTERNAL STILE2} Poly(Jump.x,BMWperim, Jump.x,PFlatH-BMWperim, Jump.x+(SMW),PFlatH-BMWperim, Jump.x+(SMW),BMWperim);
EndXtrd;
i:=i+1;
SHandle:=LNewObj;
RUNNINGFT:=RUNNINGFT+(PFlatH-BMWperim*2)*2;
END
ELSE BEGIN { CREATING A SINGLE STILE }
BeginXtrd(0,-SMH);
{INTERNAL STILE} Poly(Jump.x-(.5*SMW),BMWperim, Jump.x-(.5*SMW),PFlatH-BMWperim, Jump.x+(.5*SMW),PFlatH-BMWperim, Jump.x+(.5*SMW),BMWperim);
EndXtrd;
RUNNINGFT:=RUNNINGFT+(PFlatH-BMWperim*2);
i:=i+1;
SHandle:=LNewObj;
END;
JUMP.x:=JUMP.x+SJUMP;
END;
{ D R A W I N G T H E T O G G L E S }
IF CML <= PFLATH THEN TJUMPSEAM:=CML ELSE TJUMPSEAM:=PFLATH;
IF PTSpac = 'Evenly' THEN
IF Round(TJUMPSEAM/PTSpacMax)=(TJUMPSEAM/PTSpacMax) THEN TJUMP:=PTSpacMax ELSE TJUMP:=TJUMPSEAM/(Trunc(TJUMPSEAM/PTSpacMax)+1)
ELSE TJUMP:= PTSpacMax;
BeginXtrd(0,-BMHperim);
{TOGGLE} Poly(BMWperim,BMWperim, PFlatW-BMWperim,BMWperim, PFlatW-BMWperim,2*BMWperim, BMWperim,2*BMWperim);
EndXtrd;
THandle:=LNewObj;
FOR Count:=i DOWNTO 1 DO BEGIN
DSelectAll;
SetSelect(SHandle[Count]);
DUPLICATE(0,0);
TEMP:=SUBTRACTSOLID(THandle,SHandle[Count],THandle);
END;
Move3DObj(THandle,0,-1.5*BMWperim,0);
IF TJump<=TJumpseam-BMWperim*1.5 THEN Jump.y:=TJump ELSE Jump.y:=TJumpseam;
NXTOGGLE:=TJump;
NXTOGGLESEAM:=TJumpseam;
Temp:=0;
WHILE Jump.y<=(PFlatH-BMWperim*1.5) DO BEGIN
IF Jump.y=NXTOGGLE THEN BEGIN {DUPLICATING A REGULAR TOGGLE}
IF Jump.y > (NXTOGGLESEAM-BMWperim*1.5) THEN Temp:=(NXTOGGLESEAM-BMWperim*1.5)-Jump.y;
IF Jump.y < (NXTOGGLESEAM-TJumpseam+BMWperim*1.5) THEN Temp:=(NXTOGGLESEAM-TJumpseam+BMWperim*1.5)-Jump.y;
TempH:=HDuplicate(THandle,0,0);
Move3DObj(TempH,0,Jump.y+Temp,0);
RUNNINGFT:=RUNNINGFT+(PFlatW-BMWperim*2);
IF BMHperim = BMH THEN RUNNINGFT:=RUNNINGFT-i*BMWperim;
Temp:=0;
NXTOGGLE:=NXTOGGLE+TJump;
END
ELSE BEGIN {DUPLICATING A TOGGLE ON A SEAM}
IF PBuildMatO <> 'Laying down' THEN BEGIN
TempH:=HDuplicate(THandle,0,0);
Move3DObj(TempH,0,Jump.y-BMWperim*.5,0);
TempH:=HDuplicate(THandle,0,0);
Move3DObj(TempH,0,Jump.y+BMWperim*.5,0);
RUNNINGFT:=RUNNINGFT+2*(PFlatW-BMWperim*2);
IF BMHperim = BMH THEN RUNNINGFT:=RUNNINGFT-2*(i*BMWperim);
END
ELSE BEGIN
TempH:=HDuplicate(THandle,0,0);
Move3DObj(TempH,0,Jump.y,0);
RUNNINGFT:=RUNNINGFT+(PFlatW-BMWperim*2);
IF BMHperim = BMH THEN RUNNINGFT:=RUNNINGFT-(i*BMWperim);
END;
NXTOGGLESEAM:=NXTOGGLESEAM+TJumpseam;
END;
IF NXTOGGLE<NXTOGGLESEAM THEN
Jump.y:=NXTOGGLE
ELSE
Jump.y:=NXTOGGLESEAM;
IF NXTOGGLE = NXTOGGLESEAM THEN NXTOGGLE:=NXTOGGLE+TJump;
END;
DelObject(THandle);
SetRField(ObjH,GetName(RecH),'Summary1',Concat(Num2StrF(RUNNINGFT),' of linear material'));
{ C O V E R I N G M A T E R I A L }
Jump.x:=0;
Jump.y:=0;
TEMPx:=0;
TEMPy:=0;
TOTALAREA:=0;
IF PCoverMat <> 'None' THEN BEGIN
NameClass(CMCLASS);
WHILE Jump.x < PFlatW DO BEGIN
IF Jump.x + CMW <= PFlatW THEN TEMPx:=CMW ELSE TEMPx:= PFlatW-Jump.x;
IF Jump.y + CML <= PFlatH THEN TEMPy:=CML ELSE TEMPy:= PFlatH-Jump.y;
BeginXtrd(0,CMH);
{Covering material} Poly(Jump.x,Jump.y, Jump.x+TEMPx,Jump.y, Jump.x+TEMPx,Jump.y+TEMPy, Jump.x,Jump.y+TEMPy);
EndXtrd;
SetClass(LNewObj,CMClass);
TOTALAREA:=TOTALAREA+OBJAREA(LNEWOBJ);
IF Jump.y+TEMPy < PFlatH THEN BEGIN
Jump.y:=Jump.y+TEMPy;
END
ELSE BEGIN
Jump.x:=Jump.x+TEMPx;
Jump.y:=0;
END;
TEMPx:=0;
TEMPy:=0;
END;
SetRField(ObjH,GetName(RecH),'Summary2',Concat(Num2Str(2,TOTALAREA),' sq.ft. of covering material'));
END;
NameClass(CurrentCL);
PopAttrs;
END; {MOTHER PROG}
RUN (Flat);