Доступ к 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();
Другие вопросы по тегам