Доступ к Revit API извне Revit
Я использовал RevitPythonShell и Dynamo, но хотел бы использовать мою существующую Python IDE (Eclipse), где у меня есть конфигурация для ведения журнала, отладки, интеграции с GitHub и т. Д.
Я доволен транзакциями и общим API, и я потратил некоторое время на чтение об Revit API и немодальных соединениях, а также на вопросы, подобные другим. Некоторым из них несколько лет. Возможно ли в настоящее время взаимодействовать с Revit из Python, выполненным вне Revit?
Например, я пытался;
import clr
clr.AddReference(r'C:\Program Files\Autodesk\Revit 2016\RevitAPI')
import Autodesk.Revit.DB as rvt_db
print(dir(rvt_db))
Но это, похоже, не раскрывает ничего полезного.
1 ответ
Вы не можете вызвать Revit API из другого процесса. API предназначен для использования "в процессе", поэтому вы должны создать DLL, которая будет загружена Revit в его собственный процесс.
Как упоминалось ранее, невозможно вызвать Revit API из другого процесса. В вышеупомянутой DLL вы можете реализовать интерфейс IExternalEventHandler, чтобы иметь возможность вызывать API с помощью event.
class MyExecutionClass : IExternalEventHandler
{
public void Execute(UIApplication uiapp)
{
//your stuff
}
public string GetName()
{
return "My event executed class";
}
}
//Create event on startup
IExternalEventHandler myEventHandler = new MyExecutionClass();
ExternalEvent myExEvent = ExternalEvent.Create(myEventHandler );
//Pass event reference and raise it whenever yoo want
myExEvent.Raise();