| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Fehler beim Öffnen einer dwg-Zeichnung (1818 mal gelesen)
|
AndreasM2000 Mitglied CAD-Projektleiter, Zeichner, Programmierer
Beiträge: 21 Registriert: 24.11.2013 https://autocaddotnetsamples.wordpress.com/
|
erstellt am: 02. Aug. 2015 08:41 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ich habe versucht, eine (externe) dwg-Zeichnung zu öffnen. Einmal mittels CommandMethod und einmal den gleichen Code durch einen Button (Teil eines Formulars) zu starten. Die erste Methode klappt problemlos. Die zweite wirft folgenden Fehler aus. Was läuft falsch und muss ich ändern? System.Runtime.InteropServices.COMException (0x802000C8): Ungültiger Ausführungskontext 1. Methode mittels CommandMethod: [CommandMethod("oeffne_eine_Zeichnung")] public void oeffne_eine_Zeichnung() { string strFileName = "C:\\Temp\\6008000246.dwg"; DocumentCollection acDocMgr = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager; if (File.Exists(strFileName)) { acDocMgr.Open(strFileName, false); } else { acDocMgr.MdiActiveDocument.Editor.WriteMessage("File " + strFileName + " does not exist."); } } 2. Methode gleicher Code, aber Aufruf durch einen Button private void button1_Click(object sender, EventArgs e) { string strFileName = "C:\\Temp\\6008000246.dwg"; DocumentCollection acDocMgr = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager; if (File.Exists(strFileName)) { acDocMgr.Open(strFileName, false); } else { acDocMgr.MdiActiveDocument.Editor.WriteMessage("File " + strFileName + " does not exist."); } } Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingenieur Studio HOLLAUS Mitglied CAD / CAFM / GIS Beratung-Programmierung-Schulung
Beiträge: 1049 Registriert: 06.11.2008 Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks) RKV .... CAFM+mehr HMap ... Vermessung und Verkehr OoC .... Raumplanung CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)
|
erstellt am: 02. Aug. 2015 11:08 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasM2000
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 02. Aug. 2015 11:32 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasM2000
... der aktuelle Kontext, in dem der .Net-Code läuft, wird zudem durch das reale Öffnen einer Zeichnung verlassen und steht in der geöffneten Zeichnung nicht mehr zur Verfügung. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasM2000 Mitglied CAD-Projektleiter, Zeichner, Programmierer
Beiträge: 21 Registriert: 24.11.2013 https://autocaddotnetsamples.wordpress.com/
|
erstellt am: 02. Aug. 2015 12:43 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielen Dank für den Hinweis. Dann habe ich es jetzt anders gemacht, um dennoch ans Ziel zu kommen. Der CommandMethod-Befehl ist ja wie ein "normaler" AutoCAD-Befehl bekannt und ich kann ihn dann auch über Button_Click mittels SendStringToExecute ansprechen. acDoc.SendStringToExecute("._oeffne_eine_Zeichnung ", false, false, false); Ist also dann keine direkte Lösung, aber klappt auch. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingenieur Studio HOLLAUS Mitglied CAD / CAFM / GIS Beratung-Programmierung-Schulung
Beiträge: 1049 Registriert: 06.11.2008 Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks) RKV .... CAFM+mehr HMap ... Vermessung und Verkehr OoC .... Raumplanung CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)
|
erstellt am: 02. Aug. 2015 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasM2000
Zitat: Ist also dann keine direkte Lösung, aber klappt auch.
Schön, dass Du das als Lösung gefunden hast! Jedoch kleiner Hinweis dazu: dieses SendCommand funkt nur, wenn eine DWG im Editor vorhanden ist. Sollten alle DWG's geschlossen sein (nur das "New Tab" Window geöffnet sein), dann können auch keine Befehle eingegeben werden. ------------------
www.cars4fun.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasM2000 Mitglied CAD-Projektleiter, Zeichner, Programmierer
Beiträge: 21 Registriert: 24.11.2013 https://autocaddotnetsamples.wordpress.com/
|
erstellt am: 02. Aug. 2015 14:12 <-- editieren / zitieren --> Unities abgeben:
ja, richtig, dass muss ich noch sicherstellen, dass auf den Fall nicht vorhandener dwg-Zeichnungen reagiert wird. Der sendCommand-Befehl ist wohl im Laufe der Zeit "verloren" gegangen und durch den .SendStringToExecute-Befehl abgelöst worden? Ich konnte kein funktionierendes Beispiel mit sendCommand mehr finden, das bei mir läuft. Mein nächstes Problem ist, wenn ich eine Reihe von dwg-Dateien öffne, möchte ich sicherstellen, dass immer das letzte geöffnete dwg-Dokument "oben" liegt und aktiviert ist. Die geöffneten dwg-Documente im DocumentManager zu finden, ist nicht so schwer. Wie kann ich aber ein Document aktiv setzen. In meiner foreach-Schleife durch Zuweisen als MDIDocument wird das nicht zugelassen. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ingenieur Studio HOLLAUS Mitglied CAD / CAFM / GIS Beratung-Programmierung-Schulung
Beiträge: 1049 Registriert: 06.11.2008 Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks) RKV .... CAFM+mehr HMap ... Vermessung und Verkehr OoC .... Raumplanung CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)
|
erstellt am: 02. Aug. 2015 15:58 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasM2000
Zitat: Wie kann ich aber ein Document aktiv setzen
Sprechen wir noch immer vom Zustand während eines geöffneten (modal geladenen) Forms, dann gar nicht, die Erklärung ist oben schon gegeben. Stellt sich vielleicht auch die Frage (indirekte Anregung): wieso Windows-Form und nicht Palette? ------------------
www.cars4fun.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasM2000 Mitglied CAD-Projektleiter, Zeichner, Programmierer
Beiträge: 21 Registriert: 24.11.2013 https://autocaddotnetsamples.wordpress.com/
|
erstellt am: 02. Aug. 2015 16:27 <-- editieren / zitieren --> Unities abgeben:
ja, ich erkläre den nächsten Schritt noch einmal etwas ausführlicher. Nachdem ein oder (meistens) mehrere Dateien geöffnet sind, wird eine von ihnen in einer Variable als Dateinamen gespeichert. In meinem Fall string strFileName = "C:\\Temp\\6008000246.dwg"; Danach laufe ich durch den Document Manager und prüfe, ob einer von den geöffneten Dateien den gleichen Namen hat, wie mein vorher gespeicherter Dateinamen. Diese Datei möchte ich dann aktiv machen (soll oben liegen, den Focus haben). DocumentCollection docs = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager; foreach (Document doc in docs) { if (doc.Name == strFileName) { doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; //das geht so hier nicht. das muss ich anders machen. aber wie setze ich das doc aktiv? } } Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 02. Aug. 2015 21:16 <-- editieren / zitieren --> Unities abgeben: Nur für AndreasM2000
|