Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. import clr
  2. clr.AddReference('ProtoGeometry')
  3. from Autodesk.DesignScript.Geometry import *
  4. clr.AddReferenceToFileAndPath('C:\\Program Files\\Autodesk\\AutoCAD 2015\\Autodesk.AutoCAD.Interop')
  5.  
  6. from Autodesk.AutoCAD.Interop import *
  7. from System import *
  8.  
  9. acadApp = AcadApplicationClass()
  10. acadApp.Visible = True
  11.  
  12. restart = [0]
  13. pgons = IN[1]
  14.  
  15. def dterm(vv): #Проверка компланарности векторов
  16.     return vv[0][0]*(vv[1][1]*vv[2][2] - vv[1][2]*vv[2][1]) - vv[0][1]*(vv[1][0]*vv[2][2] - vv[1][2]*vv[2][0]) +vv[0][2]*(vv[1][0]*vv[2][1] - vv[1][1]*vv[2][0])
  17.    
  18. def vctor(pts): #Построение трех векторов по четырем точкам
  19.     vv = []
  20.     for i in range(3):
  21.             vv.append([pts[1+i].X-pts[0].X, pts[1+i].Y-pts[0].Y, pts[1+i].Z-pts[0].Z])
  22.     return vv
  23.    
  24.    
  25. for j in (pgons):
  26.     p = j.Points
  27.     if len(p) == 3:
  28.         p1C = Array[float]([p[0].X, p[0].Y, p[0].Z])
  29.         p2C = Array[float]([p[1].X, p[1].Y, p[1].Z])
  30.         p3C = Array[float]([p[2].X, p[2].Y, p[2].Z])
  31.         fac = acadApp.ActiveDocument.Database.ModelSpace.Add3DFace(p1C, p2C, p3C, p1C)
  32.     elif len(p) == 4 and round(dterm(vctor(p))) == 0:
  33.         p1C = Array[float]([p[0].X, p[0].Y, p[0].Z])
  34.         p2C = Array[float]([p[1].X, p[1].Y, p[1].Z])
  35.         p3C = Array[float]([p[2].X, p[2].Y, p[2].Z])
  36.         p4C = Array[float]([p[3].X, p[3].Y, p[3].Z])
  37.         fac = acadApp.ActiveDocument.Database.ModelSpace.Add3DFace(p1C, p2C, p3C, p4C)
  38.     elif len(p) == 4 and round(dterm(vctor(p))) != 0:
  39.         p1C = Array[float]([p[0].X, p[0].Y, p[0].Z])
  40.         p2C = Array[float]([p[1].X, p[1].Y, p[1].Z])
  41.         p3C = Array[float]([p[2].X, p[2].Y, p[2].Z])
  42.         p4C = Array[float]([p[3].X, p[3].Y, p[3].Z])
  43.         fac = acadApp.ActiveDocument.Database.ModelSpace.Add3DFace(p1C, p2C, p3C, p1C)
  44.         fac1 = acadApp.ActiveDocument.Database.ModelSpace.Add3DFace(p1C, p3C, p4C, p1C)
  45.  
  46.  
  47. acadApp.ZoomExtents()
  48. OUT = 0