Ten rozdział zawiera odpowiedzi na często zadawane pytania dotyczące makr w programie Revit.
Pytanie | Odpowiedź |
---|---|
Dlaczego utworzone makro nie jest wyświetlane na liście kategorii Menedżera makr. Dlaczego? | Zanim nowe makra zostaną wyświetlone w Menedżerze makr, należy prawidłowo zbudować projekt makra w środowisku Revit makro IDE (przy użyciu menu Zbuduj). |
Czy podczas tworzenia makra pliki RevitAPI.dll i RevitAPIUI.dll należy dodawać jako odniesienia? | No. Nie trzeba tworzyć odniesień do plików RevitAPI.dll i RevitAPIUI, ponieważ ta czynność została już wcześniej wykonana przez program. Projekt makra Revit używa obu elementów jako wymaganych odniesień. Jeśli te odniesienia zostaną usunięte ze środowiska IDE, makra Revit nie będą działać: ![]() |
Czy należy edytować pliki Revit.ini? | No. Makra w programie Revit są automatycznie rejestrowane w Menedżerze makr bez dalszej modyfikacji do systemu. |
Makro w środowisku Revit makro IDE zostało usunięte poprzez usunięcie jego metody w pliku This*.cs lub This*.vb. Jednak nazwa usuniętego makra wciąż pojawia się po otwarciu listy kategorii Menedżera makr. W jaki sposób usunąć tą nazwę z listy? | Aby makro zostało uznane za usunięte w Menedżerze makr, należy najpierw prawidłowo zbudować edytowany projekt. |
Jakie są różnice pomiędzy makrami poziomu aplikacji, a makrami poziomu dokumentu? | Makra poziomu aplikacji można uruchomić we wszystkich otwartych projektach Revit w ramach jednego wystąpienia aplikacji Revit. Projekty makr poziomu dokumentu przechowywane są w pliku RVT. Można je wczytać z bieżącego aktywnego dokumentu i uruchomić w tym dokumencie. |
W jaki sposób można uzyskać dostęp do obiektu Application lub zastępczego externalCommandData? | Wszystkie makra poziomu aplikacji skojarzone są z obiektemUIApplication. W makrach poziomu aplikacji wskaźnik słowa kluczowego Application w językach C # i VB.NET zwraca obiekt Application interfejsu API . W makrach poziomu dokumentu wskaźnik słowa kluczowego Document zwraca obiekt Document interfejsu API. Aby uzyskać dostęp do obiektu UIApplication z makra poziomu dokumentu, należy użyć obiektu this.Application. |
Co powinny zawierać metody uruchomienia i zamknięcia: Module_Startup i Module_Shutdown? |
Metoda Module_Startup jest wywoływana podczas wczytywania modułu, a metoda Module_Shutdown jest wywoływana podczas jego usuwania. Dla modułów makr poziomu aplikacji metoda Module_Startup jest wywoływana podczas otwierania projektu Revit, a metoda Module_Shutdown zostaje wywołana podczas zamykania dokumentu. Dla modułów makr poziomu dokumentu metoda Module_Startup jest wywoływana podczas uruchamiania programu Revit, a metoda Module_Shutdown zostaje wywołana podczas zamykania programu Revit. Metody Module_Startup i Module_Shutdown będą również wywołane, gdy projekt makra jest przebudowywany. Można dodać kod inicjalizacji w metodach Module_Startup oraz wykonać czynności czyszczenia w metodach Module_Shutdown. Można na przykład zarejestrować program do obsługi zdarzeń przy uruchamianiu i wyrejestrować go przy zamykaniu (jest to zalecany sposób). |
W jaki sposób i dlaczego należy rejestrować i wyrejestrowywać program do obsługi zdarzeń Revit? | Jak wspomniano wcześniej, w środowisku Revit IDE zaleca się zarejestrowanie programów do obsługi zdarzeń w metodzie *_Startup i wyrejestrowywanie ich w metodzie *_Shutdown. Dzięki temu wszystkie makra będą dynamicznie wczytywane i usuwane. Jeśli program do obsługi zdarzeń nie jest prawidłowo wyrejestrowany, wówczas podczas debugowania makra, w programie Revit może wystąpić odwołanie do nieprawidłowej metody (np. złego adresu pamięci). Pomimo że mechanizmy środowiska Revit IDE mogą w takim przypadku zapobiec awarii programu Revit, to wszelkie programy do obsługi zdarzeń, które nie zostały prawidłowo wyrejestrowane, mogą spowodować problemy z działaniem programu podczas bieżącej sesji programu Revit. |
Istnieje okno, które nie działa prawidłowo i powoduje błędy w programie Revit. | Niemodalne okna dialogowe działające poza zakresem uruchomionego wywołania interfejsu API mogą powodować problemy. Zaleca się unikanie takich wywołań, aby zapobiec niestabilności programu Revit. |
Gdzie można znaleźć przykłady ćwiczeń dotyczących metody uruchomienia i zamknięcia. oraz programu do obsługi zdarzeń? | W poniższym przykładowym kodzie jest przedstawiony sposób rejestrowania programu obsługi zdarzeń OnDocumentNewed automatycznie generującego okno komunikatu po utworzeniu nowego projektu Revit. Uwaga: jeden z przykładowych kodów makr znajdujących się w narzędziach Revit SDK zawiera przykład uruchamiania i zamykania programu do obsługi zdarzeń w makrze na poziomie dokumentu. W poniższej odpowiedzi jest przedstawiony przykład programu obsługi zdarzeń w makrze poziomu aplikacji: Uwaga: w środowisku Revit IDE można uzyskać dostęp do wszystkich zdarzeń interfejsu API w wersji 2011. Zdarzenia wcześniejsze niż dla wersji 2011 zostały usunięte. Poniższe przykłady przedstawiają nowe zdarzenia. |
Przykład kodu makra poziomu aplikacji w języku C#
private void Module_Startup(object sender, EventArgs e){this.Application.DocumentOpened += new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(Application_DocumentOpened);} void Application_DocumentOpened(object sender, Autodesk.Revit.DB.Events.DocumentOpenedEventArgs e){System.Windows.Forms.MessageBox.Show("message here");} private void Module_Shutdown(object sender, EventArgs e){ this.Application.DocumentOpened -= new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(Application_DocumentOpened);}}
Przykład kodu makra poziomu aplikacji w języku VB.NET
Private Sub Module_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.StartupAddHandler Me.OnDocumentNewed, AddressOf Me.ThisApplication_OnDocumentNewedEnd SubPrivate Sub Module_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ShutdownRemoveHandler Me.OnDocumentNewed, AddressOf Me.ThisApplication_OnDocumentNewedEnd SubPrivate Sub ThisApplication_OnDocumentNewed(ByVal document As Autodesk.Revit.Document)System.Windows.Forms.MessageBox.Show("VB.NET Application event OnDocumentNewed")End Sub