Как получить свойство оси с помощью Revit API?

Я пытаюсь использовать Revit Interactive Python Shell для поворота объекта в Revit. Я зациклился на том, как обозначить ось вращения. Я не знаю, как создать строку с API, а затем обозначить ось в ElementTransformUtils.RotateElement ()

Третий аргумент в RotateElement () - это ось. Я создаю линию, но не уверен, обозначаю ли я ее ось в третьем аргументе .RotateElement ()

Когда я запускаю этот код, ничего не происходит. Это даже в том случае, если у меня выбрана стена. Пожалуйста, дайте мне знать, если что-то нуждается в разъяснении.

Спасибо,

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

def pickobject():
    from Autodesk.Revit.UI.Selection import ObjectType
    __window__.Hide()
    picked = uidoc.Selection.PickObject(ObjectType.Element)
    __window__.Show()
    __window__.Topmost = True
    return picked

#set the active Revit application and document
app = __revit__.Application
doc = __revit__.ActiveUIDocument.Document

#define a transaction variable and describe the transaction
t = Transaction(doc, 'This is my new transaction')

#start a transaction in the Revit database
t.Start()

#perform some action here...

el = pickobject()    

p1 = XYZ(0,0,0)
p2 = XYZ(0,0,1)
myLine = Line.CreateBound(p1, p2)

ElementTransformUtils.RotateElement(doc, el.ElementId, myLine, math.pi / 2)

#commit the transaction to the Revit database
t.Commit()

#close the script window
__window__.Close()

Оказывается, я неправильно выбрал элемент и не преобразовал градусы в радианы. После этого я смог повернуть выбранный элемент на 90 градусов. Единственная проблема, с которой я сейчас сталкиваюсь, - это выбор начала координат, в котором элемент вращается.


person Christian Gentry    schedule 10.12.2018    source источник


Ответы (2)


Я думаю, что вы делаете не так, это угол. Это должно быть в радианах. В вашем примере это будет π / 2. См. здесь

person Jan Buijs    schedule 10.12.2018
comment
Привет, Ян, спасибо, что нашли время разобраться в этом. Я изменил угол на math.pi / 2. Однако стена по-прежнему не вращается. Метод поворота элемента работает только с базовой геометрией? - person Christian Gentry; 10.12.2018
comment
@ChristianGentry Я вижу, вы получили вращение, но боретесь с источником вращения? Вам просто нужно будет изменить координаты X и Y p1 и p2 в вашем коде на исходную точку, если вы хотите это изменить. - person Jan Buijs; 11.12.2018

Ваш сценарий Python выглядит для меня совершенно нормально после того, как 90 градус был заменен 0.5 * pi радианами. Вы можете сравнить его с этим аналогичным фрагментом рабочего примера кода, который используется для Творческое решение для поворота маркера высоты по частям.

person Jeremy Tammik    schedule 10.12.2018
comment
Спасибо, Джереми! Причина, по которой это не работало, заключалась в том, что я не преобразовал в радианы, а также неправильно выбрал элемент. Теперь моя единственная проблема - указать начало вращения. - person Christian Gentry; 10.12.2018
comment
Рад слышать. Ось вращения, определяемая myLine, определяет начало и направление вращения. - person Jeremy Tammik; 11.12.2018