home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
3DPOLY2L.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
3KB
|
117 lines
Procedure Poly3DToLoci;
CONST
kPoly3D = 25;
VAR
x1,y1,z1 : REAL;
px1,py1,px2,py2,px3,py3,px4,py4 : INTEGER;
k, item, scrX1, scrY1, scrX2, scrY2 : INTEGER;
index,total : INTEGER;
poly3DHan, tempHan : HANDLE;
deletePolys, deleteThisOne, cancel, finished : Boolean;
PROCEDURE CenterDialog(dX1,dX2 : INTEGER; VAR x1,x2 : INTEGER);
{
This procedure calculates the horizontal center of the user screen and returns the start and stop X values in screen coordinates.
}
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}
BEGIN
CENTERDIALOG(0,328,scrX1,scrX2);
LocateButtons1(166,328);
BEGINDIALOG(1,1,scrX1,214,scrX2,370);
ADDBUTTON('OK',1,1,px1,py1,px2,py2);
ADDBUTTON('Cancel',2,1,px3,py3,px4,py4);
ADDFIELD('This command will create a 3D locus',3,1,19,11,308,29);
ADDFIELD('at each vertex of all 3D polygons in the',4,1,19,34,298,52);
ADDFIELD('active layer.',5,1,19,57,110,75);
ADDBUTTON('Delete original 3D polygons',6,2,59,87,320,105);
ENDDIALOG;
GetDialog(1);
SetTitle('3D Poly to 3D Loci Command');
finished := FALSE;
cancel:= FALSE;
REPEAT DialogEvent(item);
IF item = 6 THEN SetItem(item,NOT(ItemSel(item)));
IF item = 2 THEN
BEGIN
finished := TRUE;
cancel := TRUE;
END;
IF item = 1 THEN finished := TRUE;
UNTIL finished;
deletePolys := ItemSel(6);
CLRDIALOG;
IF NOT(cancel) THEN
BEGIN
deleteThisOne := FALSE;
DSelectAll;
poly3DHan := FActLayer;
WHILE (poly3DHan <> NIL) DO
BEGIN
IF (getType(poly3DHan) = kPoly3D) THEN
BEGIN
total := getVertNum(poly3DHan)-1;
FOR k := 0 TO total DO
BEGIN
GetPolyPt3D(poly3DHan, k, x1, y1, z1);
Locus3D(x1, y1, z1);
deleteThisOne := TRUE;
END;
END;
IF deletePolys AND deleteThisOne THEN
BEGIN
tempHan := poly3DHan;
poly3DHan := NextObj(poly3DHan);
DelObject(tempHan);
deleteThisOne := FALSE;
END
ELSE poly3DHan := NextObj(poly3DHan);
END;
END;
END;
RUN(Poly3DToLoci);