| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Blockreferenz im Modelspace finden .NET (1383 mal gelesen)
|
Pelikan Mitglied Dipl. Ing. Masch. Bau.
Beiträge: 260 Registriert: 30.12.2002
|
erstellt am: 02. Okt. 2009 17:07 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte per .NET im Model Space eine bestimmte Blockreferenz finden. in VBA kann ich per aktivem Layout leicht alle Entitys durchlaufen dim element as Entity dim objLayout as Layout for each element in objLayout.entitys next ... in .NET kann ich auch das aktive Layout ermitteln... Wie komme ich aber an die darin definierten Entity heran ??? Vielen Dank für jeden Tip. Gruss Pelikan
PS. habe bisher nur mit VBA zu tun gehabt... finde da eigentlich alles etwas leichter (vorallem das editieren beim Debuggen vermisse ich bei .NET) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 02. Okt. 2009 17:17 <-- editieren / zitieren -->
Hi, arbeitest Du in dotNET mit TransActions oder ohne? Ohne bedeutet eigentlich, dass Du arbeiten kannst wie in VBA, ausser dass Du Dir das 'ThisDrawing'-Objekt erst selbst holen musst, Rest ist gleich. Die Elemente des aktiven Bereichs (ohne TransAction) bekommst Du mit:
Code: For Each tEnt as Autodesk.AutoCAD.Common.Interop.AcadEntity In objLayout.Block ...
>> vorallem das editieren beim Debuggen vermisse ich bei .NET
Du arbeitest mit einem 64bit-Betriebssystem! Da kann VS2008 dieses leider nicht (das ist kein Fehler von Autodesk, das geht einfach mit VS nicht), drum entwickle ich derzeit alles auf 32bit-Betriebssystembasis und da geht's einwandfrei (edit while debug). Im Notfall, wenn Dir kein Gerät mit 32bit zur Verfügung steht, mach Dir eine VmWare-Session, dann kannst Du damit ordentlich dotNET-basierte Applikationen entwickeln (und debuggen). [EDIT] Ergänzende Info zu Debuggen: 64 bit Betriebssystem + 64 bit AutoCAD ==> kein edit-while-debug 64 bit Betriebssystem + 32 bit AutoCAD ==> edit-while-debug möglich [/EDIT] - alfred - ------------------ www.hollaus.at |
Pelikan Mitglied Dipl. Ing. Masch. Bau.
Beiträge: 260 Registriert: 30.12.2002
|
erstellt am: 05. Okt. 2009 12:34 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, erst einmal Danke für deinen Tip. Ich habe also mein VBA Macro mal per com versucht nachzubilden. Im VS2005 (das setzte ich ein ist es vllt besser auf 2008 zu wechseln) gibt mir das Projekt auch keinen Fehler beim erstellen. möchte ich die DLL dann in Autocad laden kommt folgendes: Assembly kann nicht geladen werden. Fehlerdetails: System.BadImageFormatException: Die Datei oder Assembly "file:///C:\dotnet\VBA2VBProject.dll" oder eine Abhängigkeit davon wurde nicht gefunden. Es wurde versucht, eine Datei mit einem falschen Format zu laden. Dateiname: "file:///C:\dotnet\VBA2VBProject.dll" bei System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) bei System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) bei System.Reflection.Assembly.LoadFrom(String assemblyFile) bei Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName) bei loadmgd() ... Danke für jeden Hinweis. Gruss Pelikan aka (Andreas)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 05. Okt. 2009 12:48 <-- editieren / zitieren -->
Hi Andreas, dass wer seine SystemInfo weglöscht, ist wirklich nicht alltäglich. Bedeutet das jetzt, Du arbeitest ger nicht auf 64bit-Basis? Und um welche AutoCAD-Version geht's eigentlich? Viel sagt die Fehlermeldung nicht aus - hast Du ev. in der Plattformkonfiguration eingestellt, dass Du auf 'X86' beschränkst, aber dann 64bit laden willst? - weitere Variante könnte sein, dass Du in den Verweisen die Eigenschaft 'lokale Kopie' auf TRUE stehen hast (aber das sollte eigentlich nur bei den *mgd.dll eine Rolle spielen, nicht bei Interop). - oder Du hast in den Verweisen Zeug drin, das nur 32bit kann ==> lösch mal aus den Verweisen alles raus, was Du referenziert hast und zum Verbinden mit AutoCAD nicht brauchst. Wenn Du Dein Projekt halbwegs leer machst und die ganze Solution hier uploadest, dann kann ich hineinsehen. Aus der Ferne ist's nicht ganz so easy. - alfred - ------------------ www.hollaus.at |
Pelikan Mitglied Dipl. Ing. Masch. Bau.
Beiträge: 260 Registriert: 30.12.2002
|
erstellt am: 05. Okt. 2009 13:08 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 05. Okt. 2009 13:21 <-- editieren / zitieren -->
Hi, >> Also ich habe Vista64bit das Projekt ist für Autocad2010 ...und neben den obigen Empfehlung ist auch gewährleistet, dass Deine Verweise auf die AutoCAD-2010 Interops/Dll's zeigen? Also entweder das Verzeichnis in der Verweisübersicht zeigt auf Dateien im AutoCAD2010-Verzeichnis oder es steht bei den Dateinamen etwas wie 18 und nicht 17 drin! - alfred - ------------------ www.hollaus.at |
Pelikan Mitglied Dipl. Ing. Masch. Bau.
Beiträge: 260 Registriert: 30.12.2002
|
erstellt am: 05. Okt. 2009 13:38 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 05. Okt. 2009 13:51 <-- editieren / zitieren -->
Hi, Du hast eine Ref eingebunden (VisualBasic for Applications) ==> dies ist, glaube ich, nur 32bit-fähig, damit hast Du die Beschränkung, dass das gesamte Projekt nur mit 32bit arbeitet und Dein 64bit-AutoCAD das nicht laden kann. Tu's bitte mal raus (wie ich schon oben empfohlen habe) und probierst nochmals. In der Fehlermeldung (am Anfang) ist enthalten: file:///C:\dotnet\VBA2VBProject.dll
Beim Compiler hast Du aber als Zielverzeichnis das 'bin'-Verzeichnis eingestellt, Du musst schon aus dem Verzeichnis laden, wo auch die Debug-Informationen stehen (und ev. auch andere Verweise). In den Projekteigenschaften (und das ist wohl das böseste) hast Du einen Button (Karte) 'Kompilieren' ==> (Button) 'erweiterte Kompilerungsoptionen' und da steht drin: Benutzerdefinierte Konstanten: Win32=True Ziel-CPU: x86 beides ist falsch und damit bestätigt sich meine Vermutung von oben, Du versuchst, eine 32bit-Dll in ein 64bit-AutoCAD zu laden ==> geht nicht. Diese Einstellungen können ev. auch automatisch gemacht worden sein durch Hinzufügen von Verweisen, die nur 32bit-fähig sind. - alfred - ------------------ www.hollaus.at |
Pelikan Mitglied Dipl. Ing. Masch. Bau.
Beiträge: 260 Registriert: 30.12.2002
|
erstellt am: 05. Okt. 2009 14:12 <-- editieren / zitieren --> Unities abgeben:
Die Einstellungen sind automatisch gemacht worden. Ich habe ein Macro aus dem Developer Network genutzt um ein VBA Macro nach .Net zu portieren. Mir scheint das bei 64bit Systemen hier ein Problem besteht. So wie es ausschaut werde ich das mal, wenn ich Zeit habe, in .Net schreiben. (ohne interop) Das Konvertieren scheint mir nicht sauber genug zu sein. Danke für Deine schnelle und kompetente Hilfe !!! Gruss Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| |
Ex-Mitglied
|
erstellt am: 05. Okt. 2009 14:19 <-- editieren / zitieren -->
Hi, - entferne den Verweis zu 'VisualBasic for Applications' - lösche den Eintrag 'Benutzerdefinierte Konstanten' - stelle den Eintrag 'Ziel-CPU' auf 'Any' und ich sehe mal (rein vom Hinsehen) kein weiteres Hindernis mehr. - alfred - ------------------ www.hollaus.at |