home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 March / Chip_1998-03_cd.bin / tema / MINICAD / MC7DEMO / MINICAD.1 / 3DPOLY2L.MPC < prev    next >
Text File  |  1997-04-30  |  3KB  |  117 lines

  1. Procedure Poly3DToLoci;
  2. CONST
  3. kPoly3D = 25;
  4. VAR
  5.     x1,y1,z1 : REAL;
  6.     px1,py1,px2,py2,px3,py3,px4,py4 : INTEGER;
  7.     k, item, scrX1, scrY1, scrX2, scrY2 : INTEGER;
  8.     index,total : INTEGER;
  9.     poly3DHan, tempHan : HANDLE;
  10.     deletePolys, deleteThisOne, cancel, finished : Boolean;
  11.     
  12. PROCEDURE CenterDialog(dX1,dX2 : INTEGER; VAR x1,x2 : INTEGER);
  13. {
  14. This procedure calculates the horizontal center of the user screen and returns the start and stop X values in screen coordinates.
  15. }
  16. VAR
  17.     scrX1,scrY1,scrX2,scrY2,w : INTEGER;
  18. BEGIN
  19.     GetScreen(scrX1,scrY1,scrX2,scrY2);
  20.     w := dX2 - dX1;
  21.     x1 := ((scrX1 + scrX2) DIV 2) - (w DIV 2);
  22.     x2 := x1 + w;
  23. END;
  24.  
  25. Procedure LocateButtons1(scnh,scnw : INTEGER);
  26. {
  27. This procedure locates the 'OK' and 'Cancel' buttons centered at the bottom of the dialog box.
  28. }
  29. VAR
  30.     v1,v2,v3,v4 : INTEGER;
  31.  
  32. Procedure Swap(VAR  m1,m2,m3,m4 : INTEGER);
  33. VAR
  34.     Temp : INTEGER;
  35. BEGIN
  36.     Temp:=m1;
  37.     m1:=m3;
  38.     m3:=Temp;
  39.     Temp:=m2;
  40.     m2:=m4;
  41.     m4:=Temp;
  42. END;        {of Swap}
  43.  
  44. BEGIN
  45.     px1:=(scnw DIV 2) - 80;
  46.     px2:=(scnw DIV 2) - 10;
  47.     px3:=(scnw DIV 2) + 10;
  48.     px4:=(scnw DIV 2) + 80;
  49.  
  50.     py1:=scnh-40;
  51.     py2:=scnh-20;
  52.     py3:=py1;
  53.     py4:=py2;
  54.  
  55.     GetVersion(v1,v2,v3,v4);
  56.     IF v4 = 1 THEN Swap(px1,px2,px3,px4);
  57. END;        {of Locate Buttons1}
  58.  
  59.  
  60. BEGIN
  61.     CENTERDIALOG(0,328,scrX1,scrX2);
  62.     LocateButtons1(166,328);
  63.     BEGINDIALOG(1,1,scrX1,214,scrX2,370);
  64.         ADDBUTTON('OK',1,1,px1,py1,px2,py2);
  65.         ADDBUTTON('Cancel',2,1,px3,py3,px4,py4);
  66.         ADDFIELD('This command will create a 3D locus',3,1,19,11,308,29);
  67.         ADDFIELD('at each vertex of all 3D polygons in the',4,1,19,34,298,52);
  68.         ADDFIELD('active layer.',5,1,19,57,110,75);
  69.         ADDBUTTON('Delete original 3D polygons',6,2,59,87,320,105);
  70.     ENDDIALOG;
  71.     GetDialog(1);
  72.     SetTitle('3D Poly to 3D Loci Command');
  73.     finished := FALSE;
  74.     cancel:= FALSE;
  75.     REPEAT DialogEvent(item);
  76.         IF item = 6 THEN SetItem(item,NOT(ItemSel(item)));
  77.         IF item = 2 THEN
  78.         BEGIN
  79.             finished := TRUE;
  80.             cancel := TRUE;
  81.         END;
  82.     IF item = 1 THEN finished := TRUE;
  83.     UNTIL finished;
  84.     deletePolys := ItemSel(6);
  85.     CLRDIALOG;
  86.     
  87.     IF NOT(cancel) THEN
  88.     BEGIN
  89.         deleteThisOne := FALSE;
  90.         DSelectAll;
  91.         poly3DHan := FActLayer;
  92.         WHILE (poly3DHan <> NIL) DO
  93.         BEGIN
  94.             IF (getType(poly3DHan) = kPoly3D) THEN
  95.             BEGIN
  96.             total := getVertNum(poly3DHan)-1;
  97.                 FOR k := 0 TO total DO
  98.                 BEGIN
  99.                     GetPolyPt3D(poly3DHan, k, x1, y1, z1);
  100.                     Locus3D(x1, y1, z1);
  101.                     deleteThisOne := TRUE;
  102.                 END;
  103.             END;
  104.             IF deletePolys AND deleteThisOne THEN
  105.             BEGIN
  106.                 tempHan := poly3DHan;
  107.                 poly3DHan := NextObj(poly3DHan);
  108.                 DelObject(tempHan);
  109.                 deleteThisOne := FALSE;
  110.             END
  111.             ELSE poly3DHan := NextObj(poly3DHan);
  112.         END;
  113.     END;
  114. END;
  115.  
  116. RUN(Poly3DToLoci);
  117.