V této části naleznete odpovědi na nejčastější dotazy o makrech aplikace Revit.
Otázka | Odpověď |
---|---|
Čekal jsem, že moje nově vytvořené makro bude uvedeno v kategorizovaném seznamu Správce maker, avšak ono tam není. Proč? | Nová makra se ve Správci maker zobrazí až po úspěšném sestavení projektu makra v integrovaném vývojovém prostředí Revit makro (pomocí nabídky Sestavení). |
Je při vytváření nového makra nutné přidat jako reference soubory RevitAPI.dll a RevitAPIUI.dll? | Ne. Není nutné odkazovat na soubory RevitAPI.dll a RevitAPIUI.dll, protože to již bylo provedeno. Projekt makra Revit používá jako potřebné reference oba soubory. Pokud tyto reference v integrovaném vývojovém prostředí odstraníte, dojde k selhání maker: ![]() |
Je nutné upravit soubory Revit.ini? | Ne. Makra aplikace Revit se automaticky registrují pro zobrazení ve Správci maker bez jakékoliv další úpravy systému. |
V integrovaném vývojovém prostředí Revit makro bylo makro odstraněno odebráním jeho metody v souboru This*.cs nebo This*.vb. Při opětovném otevření kategorizovaného seznamu Správce maker je však název odstraněného makra stále zobrazen. Jak lze tento název vymazat z tohoto seznamu? | Správce maker rozpozná odebrání teprve po úspěšném sestavení upraveného projektu. |
Jaké jsou rozdíly mezi makry na úrovni aplikace a makry na úrovni dokumentu? | Makra na úrovni aplikace lze spouštět ve všech otevřených projektech aplikace Revit v rámci jedné instance aplikace Revit. Projekty maker na úrovni dokumentu jsou uloženy v souboru RVT. Mohou být načteny z aktuálního aktivního dokumentu a spuštěny na tomto dokumentu. |
Jak lze získat přístup k objektu Application nebo jeho ekvivalentu externalCommandData? | Ke všem makrům na úrovni aplikace je přidružen objekt UIApplication. V makrech na úrovni aplikace vrací ukazatel klíčového slova Application v jazyce C# a VB.NET objekt Application rozhraní API. V makrech na úrovni dokumentu vrací klíčové slovo Document objekt Document rozhraní API. Chcete-li k objektu UIApplication získat přístup z makra na úrovni dokumentu, použijte this.Application. |
Co lze zahrnout do spouštěcích a ukončovacích metod: Module_Startup a Module_Shutdown? |
Metoda Module_Startup je volána při načtení modulu, metoda Module_Shutdown je volána při uvolnění modulu. U modulů maker na úrovni aplikace je při otevření projektu aplikace Revit volána metoda Module_Startup a při zavření projektového dokumentu je volána metoda Module_Shutdown. U modulů maker na úrovni dokumentu je při spuštění aplikace Revit volána metoda Module_Startup a při ukončení aplikace je volána metoda Module_Shutdown. Metody Module Startup a Module_Shutdown budou volány i při opětovném sestavení projektu makra. Do metod Module_Startup můžete přidat inicializační kód, do metod Module_Shutdown lze přidat určité mazací úkony. Při spuštění lze například zaregistrovat obslužné rutiny událostí a při vypnutí jejich registraci zrušit (doporučený postup). |
Jak a proč se provádí registrace a rušení registrace obsluhy událostí aplikace Revit? | Jak bylo zmíněno výše, doporučený způsob, jak toho dosáhnout v integrovaném vývojovém prostředí Revit, je zaregistrovat obsluhy událostí v metodě *_Startup a zrušit jejich registraci v metodě *_Shutdown. Všechna makra budou zaváděna a uvolňována dynamicky. Pokud při ladění makra není registrace obslužné rutiny události správně zrušena, může aplikace Revit volat chybnou metodu (například neplatnou adresu paměti). Ačkoli v této situaci může integrované vývojové prostředí Revit zabránit zhroucení aplikace Revit, jakékoli obslužné rutiny událostí, jejichž registrace není správně zrušena, mohou způsobit provozní potíže během aktuální relace aplikace Revit. |
Zobrazuje se dialog, který nejspíše nefunguje správně a způsobuje potíže s aplikací Revit. | Nemodální dialogy, operující nad rámec spuštěného zpětného volání API, mohou způsobovat problémy. Doporučujeme předejít možné nestabilitě aplikace Revit tím, že se vyvarujete použití takovýchto zpětných volání. |
Chci experimentovat s metodami Startup a Shutdown a obsluhou událostí. Je k dispozici nějaký příklad? | Následující ukázkový kód znázorňuje, jak zaregistrovat obsluhu událostí OnDocumentNewed, která u nového projektu aplikace Revit automaticky vyvolá okno se zprávou. Poznámka: V jedné z ukázek makra v sadě Revit SDK může být znázorněn příklad spuštění a ukončení obslužné rutiny události na úrovni dokumentu. V těchto nejčastějších dotazech jsou uvedeny příklady obslužných rutin událostí na úrovni aplikace. Ve verzi 2011 lze k veškerým událostem aplikačního rozhraní API získat přístup prostřednictvím integrovaného vývojového prostředí Revit. Události předcházející verzi 2011 byly odstraněny. Následující příklady uvádí nové události. |
Příklad v jazyce C# na úrovni aplikace:
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);}}
Příklad v jazyce VB.NET na úrovni aplikace:
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