1

我正在尝试创建一个可以从选择中创建详细信息行的脚本。

尽管每条线大约 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))
4

1 回答 1

0

您的四个嵌套for循环将生成大量行。我无法想象你真的需要所有这些。您可以添加一个断言,以保证 和 之间的最小距离a始终b大于,例如,十分之一英寸,约。2.5 毫米。我敢打赌,断言会触发。换句话说,您的某些行可能比 5' 短。也许有些甚至是零长度?

于 2019-06-04T13:55:27.363 回答