Revit API python Ошибка: исключение: idx может быть только 0, 1, 2 - PullRequest
0 голосов
/ 10 марта 2019

Может кто-нибудь помочь мне понять эту ошибку. Я все еще изучаю Revit API (и python), и поиск не помог. Я пытаюсь получить точку расположения xyz элемента.

вот мой код:

elements= ui.Selection() 
for d in elements:
for l in d.Parameters:
    for x in d.Location.Point:
        print x

здесь вывод, ПРИМЕЧАНИЕ: он возвращает три значения:

149.412934765
69.7704247908
-3.71628688979

вот сообщение об ошибке. Я не понимаю ссылку на idx в сообщении об ошибке:

IronPython Traceback:
Traceback (most recent call last):
 File "C\BTS-NY-BETA.extension\BTS-NY-BETA.tab\Beta Tools.panel\BETA3.pushbutton\Get linked docs_script.py", line 32, in 
Exception: idx can be only 0, 1, 2.
Parameter name: idx


Script Executor Traceback:
Autodesk.Revit.Exceptions.ArgumentOutOfRangeException: idx can be only 0, 1, 2.
Parameter name: idx

 at Autodesk.Revit.DB.XYZ.get_Item(Int32 idx)
 at Microsoft.Scripting.Interpreter.FuncCallInstruction`3.Run(InterpretedFrame frame)
 at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
 at Microsoft.Scripting.Interpreter.LightLambda.Run4[T0,T1,T2,T3,TRet](T0 arg0, T1 arg1, T2 arg2, T3 arg3)
 at IronPython.Runtime.ItemEnumerator.System.Collections.IEnumerator.MoveNext()
 at Microsoft.Scripting.Interpreter.FuncCallInstruction`2.Run(InterpretedFrame frame)
 at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
 at Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 arg1)
 at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
 at PyRevitBaseClasses.ScriptExecutor.ExecuteScript(PyRevitCommandRuntime& pyrvtCmd)

Ответы [ 2 ]

2 голосов
/ 10 марта 2019

Точка не является массивом значений, доступ к X, Y, Z - правильный путь.

0 голосов
/ 10 марта 2019

Хотя я до сих пор не понимаю ошибку, мне удалось устранить сообщение об ошибке, отредактировав мой код следующим образом:

elements= ui.Selection() 
for d in elements:
for l in d.Parameters:
    for pt in d.Location.Point:
        print pt.X
        print pt.Y
        print pt.Z
...