получить кривые из полилиний для создания линии детализации - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь создать сценарий, который может создавать подробные строки из выделенного элемента.

Хотя строки имеют размер около 5 'каждая, сценарий сообщает об ошибке:

Исключение: Autodesk.Revit.Exceptions.ArgumentsInconsistentException: длина кривой слишком мала для допуска Revit (как указано в Application.ShortCurveTolerance) Имя параметра: конечные точки

Мой код:

#Import Autodesk stuffs
import clr
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI.Selection import *

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager

# Import iron python packages
import sys
pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
sys.path.append(pyt_path)

import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager


app = __revit__.Application
Ui = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
view = doc.ActiveView

#TransactionManager.Instance.ForceCloseTransaction()
#t = Transaction(doc, "Create CAD Copy")  
#t.Start()

from Autodesk.Revit.UI import Selection


selection = [ doc.GetElement( elId ) for elId in __revit__.ActiveUIDocument.Selection.GetElementIds() ]
curve = []
opt = Options()

allGeom =[]
solidGeoms=[]
for i in selection:
    geo = i.get_Geometry(opt)
    for a in geo:
        geo = a.GetInstanceGeometry()
        for g in geo:
            allGeom.append(g)

Lines=filter(lambda x : type(x)==Line,allGeom)

polylines1=filter(lambda x : type(x)==PolyLine,allGeom)
polylines2=filter(lambda x : type(x)==PolyLine,allGeom)

polypoints1=[]

for i in polylines1:
    a = i.GetCoordinates()
    polypoints1.Add(a)


pointlist1=[]
for i in polypoints1:
    j=i
    i.RemoveAt(0)
    pointlist1.append(i)
print(pointlist1)


polypoints2=[]

for i in polylines2:
    a = i.GetCoordinates()
    polypoints2.Add(a)


pointlist2=[]
for i in polypoints2:
    j=i
    m=i.Count
    i.RemoveAt((m-1))
    pointlist2.append(i)
print(pointlist2)

line=[]
for i in pointlist1:
    for j in pointlist2:
        for a in i: 
            for b in j:
                line.append(Line.CreateBound(a,b))

1 Ответ

0 голосов
/ 04 июня 2019

Вы, четыре вложенных цикла for, будете генерировать множество строк. Я не могу представить, что вам действительно нужно все это. Вы можете добавить утверждение, гарантирующее, что минимальное расстояние между a и b всегда больше, чем, скажем, десятая часть дюйма, ок. 2,5 мм. Могу поспорить, что утверждение сработает. Другими словами, некоторые из ваших строк, вероятно, короче 5 '. Может быть, некоторые даже нулевой длины?

...