home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
STR_DUCT.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
4KB
|
194 lines
PROCEDURE StraightDuctSetup;
{
⌐1996, Diehl Graphsoft, Inc.
Developed by Frank Brault
Last modified: 4/3/97
}
CONST
kLineSize = 12;
kInsulatedOffset = 1.0;
kLinedOffset = 1.0;
kFilledPat = 5;
kPlainPat = 1;
kDashedLine = -2;
kSolidLine = 2;
VAR
han1,han2 : HANDLE;
item, x1, x2 : INTEGER;
px1,py1,px2,py2,px3,py3,px4,py4 : INTEGER;
dWidth, dDepth, dHtAFF,wallAngle : REAL;
cx1,cy1,tx,ty,xPt1,yPt1,xPt2,yPt2 : REAL;
defaultWallWidth, wallLength : REAL;
theFillPat,defaultPenSize : INTEGER;
cancel,finished : BOOLEAN;
lined, Insulated, filled, labeled : BOOLEAN;
labelString : STRING;
FUNCTION Pts2Ang(x1,y1,x2,y2 : REAL) : REAL;
VAR
tR : REAL;
BEGIN
IF X1 = X2 THEN tR:= 90
ELSE tR:=arcTan((y2-y1)/(x2-x1)) * 180/pi;
IF ((tR = 90) & (y2 < y1)) OR (x2 < x1) THEN tR:= -tR;
IF x2 < x1 THEN
IF y1 < y2 THEN tR:= 180 - tR
ELSE
IF 180 + tR <> 180 THEN tR:= -(180 + tR)
ELSE tR:= 180 + tR;
Pts2Ang:= tR;
END;
PROCEDURE CenterDialog(dX1,dX2 : INTEGER; VAR x1,x2 : INTEGER);
VAR
scrX1,scrY1,scrX2,scrY2,w : INTEGER;
BEGIN
GetScreen(scrX1,scrY1,scrX2,scrY2);
w := dX2 - dX1;
x1 := ((scrX1 + scrX2) DIV 2) - (w DIV 2);
x2 := x1 + w;
END;
Procedure LocateButtons1(scnh,scnw : INTEGER);
{
This procedure locates the 'OK' and 'Cancel' buttons centered at the bottom of the dialog box.
}
VAR
v1,v2,v3,v4 : INTEGER;
Procedure Swap(VAR m1,m2,m3,m4 : INTEGER);
VAR
Temp : INTEGER;
BEGIN
Temp:=m1;
m1:=m3;
m3:=Temp;
Temp:=m2;
m2:=m4;
m4:=Temp;
END; {of Swap}
BEGIN
px1:=(scnw DIV 2) - 80;
px2:=(scnw DIV 2) - 10;
px3:=(scnw DIV 2) + 10;
px4:=(scnw DIV 2) + 80;
py1:=scnh-40;
py2:=scnh-20;
py3:=py1;
py4:=py2;
GetVersion(v1,v2,v3,v4);
IF v4 = 1 THEN Swap(px1,px2,px3,px4);
END; {of Locate Buttons1}
{*********** MAIN ***********}
BEGIN
PushAttrs;
FillFore(0,0,0);
defaultWallWidth := GetWallWidth;
defaultPenSize := FPenSize;
PenSize(12);
CENTERDIALOG(0,252,x1,x2);
LocateButtons1(197,252);
BEGINDIALOG(1,1,x1,209,x2,406);
ADDBUTTON('OK',1,1,px1,py1,px2,py2);
ADDBUTTON('Cancel',2,1,px3,py3,px4,py4);
ADDFIELD('X',3,1,121,14,132,32);
ADDFIELD('( Width X Depth )',4,1,54,38,199,56);
ADDFIELD('Duct Height AFF:',5,1,31,68,145,86);
ADDFIELD('20',6,2,55,12,106,28);
ADDFIELD('12',7,2,151,12,200,28);
ADDFIELD('120',8,2,151,67,200,82);
ADDBUTTON('Lined',9,2,46,104,106,122);
ADDBUTTON('Insulated',10,2,46,124,126,142);
ADDBUTTON('Filled',11,2,140,104,200,122);
ADDBUTTON('Labeled',12,2,140,124,210,142);
ENDDIALOG;
GetDialog(1);
finished := FALSE;
cancel:= FALSE;
SetTitle('Wall Duct Setup');
REPEAT DialogEvent(item);
IF item > 8 THEN SetItem(item,NOT(ItemSel(item)));
IF item = 2 THEN
BEGIN
finished := TRUE;
cancel := TRUE;
END;
IF item = 1 THEN finished := TRUE;
UNTIL finished;
lined := ItemSel(9);
Insulated := ItemSel(10);
filled := ItemSel(11);
labeled := ItemSel(12);
labelString := CONCAT(getField(6),' X ',getField(7));
dWidth := str2Num(getField(6));
dDepth := str2Num(getField(7));
dHtAFF := str2Num(getField(8));
CLRDIALOG;
IF NOT(cancel) THEN
BEGIN
SetZVals(dHtAFF, dDepth);
IF insulated THEN DoubLines(dWidth + (kInsulatedOffset*2)) ELSE DoubLines(dWidth);
ClearCavities;
IF filled THEN
BEGIN
IF insulated THEN FillPat(kPlainPat) ELSE FillPat(kFilledPat);
theFillPat := kFilledPat;
END
ELSE
BEGIN
FillPat(kPlainPat);
theFillPat := kPlainPat;
END;
IF lined THEN
BEGIN
PenPat(kDashedLine);
AddCavity(TRUE,-((dWidth/2)-kLinedOffset),(dWidth/2)-kLinedOffset,theFillPat);
END;
IF Insulated THEN
BEGIN
PenPat(kSolidLine);
AddCavity(TRUE,-(dWidth/2),dWidth/2,theFillPat);
END;
IF insulated THEN PenPat(kDashedLine) ELSE PenPat(kSolidLine);
MESSAGE('Draw duct. Double-click to finish...');
CallTool(-208);
CLRMESSAGE;
{WallCap(True,False,False,0.0,0.0);
WallCap(False,False,False,0.0,0.0);}
IF labeled THEN
BEGIN
han1 := LOBJECT;
HCenter(han1,cx1,cy1);
GetSegPt1(han1,xPt1,yPt1);
GetSegPt2(han1,xPt2,yPt2);
wallLength := Distance(xPt1,yPt1,xPt2,yPt2);
wallAngle := Pts2Ang(xPt1,yPt1,xPt2,yPt2);
IF wallAngle > 90 THEN wallAngle := wallAngle + 180;
TextOrigin(0,0);
BeginText;
labelString
EndText;
han2:= LOBJECT;
HCENTER(han2,tx,ty);
HRotate(han2,tx,ty,wallAngle);
HMove(han2,cx1-tx,cy1-ty);
END;
END;
DoubLines(defaultWallWidth);
PenSize(defaultPenSize);
PopAttrs;
END; {** of MAIN}
RUN(StraightDuctSetup);