Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  cuix über c#-Plugin bei Bedarf nachladen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  cuix über c#-Plugin bei Bedarf nachladen (1354 mal gelesen)
Kricher
Mitglied
Entwickler


Sehen Sie sich das Profil von Kricher an!   Senden Sie eine Private Message an Kricher  Schreiben Sie einen Gästebucheintrag für Kricher

Beiträge: 270
Registriert: 10.09.2004

erstellt am: 11. Mrz. 2010 15:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Ihr,
ich bin erst seit 2 Tagen mit der Autocad-API (und überhaupt Autocad) unterwegs, also bitte nachsichtig sein 
Ich habe ein Plugin in c# unter Verwendung der .Net-API von Autdesk geschrieben. Ich habe bereits entsprechende Registrierungsfunktionen implementiert (also autom. geladen beim Programmstart von Autocad) und auch das IExtensionApplication -Interface implementiert.
Nach der ersten Registrierung wird das Plugin auch schon autom. beim Programmstart von Autocad mit geladen und es wird auch auch schon die Initialize()-Methode des Interface aufgerufen.
Des weiteren habe ich ein Ribbon über das entsprechende ACAD-Tool(Benutzeroberfl.) generiert und in einem bestimmten Verzeichnis als cuix-Datei abgelegt.
Was ich nicht hinbekomme, ist das autom. Einhängen dieser cuix-Datei beim Startup. Ich habe ein Beispiel gefunden, welches bei mir aber überhaupt nicht funzt.
Code:

Document doc = Application.DocumentManager.MdiActiveDocument;
object oldCmdEcho = Application.GetSystemVariable("CMDECHO");
Application.SetSystemVariable("CMDECHO", 0);
doc.SendStringToExecute("(command \"_.CUILOAD\" \""
        + cuiFile
        + "\")(setvar \"CMDECHO\" "
        + oldCmdEcho
        + ")(princ) " , false, false, false);


Wenn ich diesen Code beim Startup verwende, bekomme ich eine Exception "eNoDocument" (o.ä.) bei dem doc.SendString....
Wenn ich den gleichen Code über den Prompt in meinem Assembly ausführe, dann taucht meine CUIX zumindest unter den Partiellen Anpassungsdateien auf, ist jedoch nicht sichtbar als Menü?

Was mache ich falsch, gibt es evtl. einen besseren Weg???

Danke schon mal im Voraus.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 11. Mrz. 2010 18:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> das Plugin auch schon autom. beim Programmstart von Autocad mit geladen
>> ...
>> es wird auch auch schon die Initialize()-Methode des Interface aufgerufen

Wenn ich aus diesem folgere, dass Du Deine gelistete Funktion beim Initialize aufrufst, das Initialize bereits (durch Eintragung in der Registry) automatisiert mit AutoCAD geladen wird, dann hast Du eigentlich ein zeitliches bzw. ein Reihenfolgenproblem. Diese Zeile:

Document doc = Application.DocumentManager.MdiActiveDocument;

will auf das aktive Dokument hingreifen, beim Start von AutoCAD gibt es das aber noch nicht, denn die Initialisierung wird vorher gestartet, bevor das erste Document aktiviert ist.

Für SendString gilt da natürlich gleiches, denn auch das kann erst ausgelöst werden, wenn ein Doc aktiv ist, aber soweit kommt Dein Code gar nicht, fliegt eben schon bei oberer Zeile ab.

Such Dir einen Event, der von der Application kommt, oder z.B. DocumentActivated oder wenn AutoCAD in den Wartemodus fällt (Stichwort 'Quiescent'), dann prüfst Du, ob Du Deinen Menücheck schon durchgeführt hast und wenn nicht, dann macchst Du Deine Menü-Ladevorgänge.

HTH, viel Erfolg, - alfred -

------------------
www.hollaus.at

Kricher
Mitglied
Entwickler


Sehen Sie sich das Profil von Kricher an!   Senden Sie eine Private Message an Kricher  Schreiben Sie einen Gästebucheintrag für Kricher

Beiträge: 270
Registriert: 10.09.2004

erstellt am: 12. Mrz. 2010 09:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Alfred,

danke für Deine Antwort. Meine Vermutung ging auch schon in diese Richtung (zeitliches Ablaufproblem), hatte mich jedoch gewundert, dass ich über den Debugger eine scheinbar gültige Document-Instanz bekomme (beim Initialize). Zumindest konnte ich bereits dort schon auf die .Name-Eigenschaft zugreifen. Dann liegt es wohl wie von Dir beschrieben an dem noch nicht aktivierten Document.

Ich werde mich jetzt erst mal wegen 'Quiescent' schlau machen.

Danke

Kricher

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz