| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: #develop und AutoCAD (1264 mal gelesen)
|
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Revit Structure 2011 Acad 2011-deutsch, Express Tools 3ds Max 2011 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 26. Jul. 2004 15:13 <-- editieren / zitieren --> Unities abgeben:
Hallo .NET Einsteiger und Wissende Aufgrund dieses Forumsbeitrages und einiger Artikel die ich in letzter Zeit gelesen habe, habe ich beschlossen mich nun C# zuzuwenden. Dabei habe ich nun gleich ein Problem (nicht nur eines, aber das ist nun mal das wichtigste). Ich habe mit #develop versucht die dll's der Managed Wrapper Classes zu laden, leider wird nun AutoCAD nicht erkannt. Ich denke das die dll-Datein das Problem in Verbindung mit #develop sind, in Microsoft VS sollte ja alles ohne Probleme funtionieren. Ich habe schon einige Versuche mit "Hello World" hinter mir und bin gerade dabei mir die Grundbegriffe von C# beizubringen (und das ist auch nicht gerade ein kleiner Schritt wenn man bisher nur VBA programmiert hat). Dann freue ich mich endlich Begriffen zu haben wie man mit using.Autodesk.blablabla an die Contextleiste kommt, da funktioniert das ganze überhaupt nicht Wer von euch hat sich schon mit #develop und den Managed Wrapper Classes herumgespielt und kann mir sagen was ich falsch gemacht habe. Hier findet ihr was auf meinem Bildschirm zu sehen ist, nämlich gar nix: ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 26. Jul. 2004 16:31 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Dunkel sind die Wege, aber am Ende sieht man einen Lichtschimmer... Mir ist es auch nicht gelungen, ein Projekt in #Develop direkt erzeugen, also 'Neues Combine, Verweise einfügen, Code schreiben, kompilieren'. Da kommt die Meldung "Type oder Namespace 'CommandMethod' unbekannt". Was aber geklappt hat: 'Projekt importieren'! Da erscheint zwar was von VisualStudio 2003 Projekt, und mein Beispiel war ein VS2002-Projekt - aber trotzdem hat es irgendwie funktioniert. Ich musste allerdings die beiden Verweise nochmal einfügen, die sind bei der Konvertierung einfach verschwunden... Jedenfalls konnte ich dann auch mit #Dev kompilieren, und das "Hello World!" lief. Tja, was das nun ist bzw. war - no idea. Sollte aber durchaus rauszukriegen sein. Ich hänge hier sowohl das VS-Projekt als auch das #Dev-Projekt dran. Die Konfigurationsdateien sind sowohl bei VS als auch bei #Dev lesbares XML. Wenn man sich die .prjx des konvertierten Projekts sowie die des nicht funktionierenden Direktprojekts in einen Editor lädt und vergleicht, sollte eigentlich der Unterschied irgendwo rauszufinden sein. Vielleicht liegt's auch in den cmbx-Dateien -- nö, kann eigentlich nicht sein. In beiden Projekten steht 'Local Copy' auf True, und die Assemblies sind ins Bin/Debug-Verzeichnis kopiert. Am Pfad oder so kann's also nicht liegen. Tja, Suchen, Vergleichen! Und wenn du's gefunden hast, gleich melden;-) Gruß, Axel Strube-Zettler Nachtrag: verwendete #Dev-Version war Fidalgo RC2 - also noch immer ein Release Candidate, und auch noch immer mit grausamen Macken;-) ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 26. Jul. 2004 20:19 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Ich bin nochmal dem Vorschlag von Achim Dabrunz nachgegangen, was den C#Builder von Borland angeht - den kannte ich bisher gar nicht persönlich. Aber nun habe ich es mal ausprobiert. Was braucht man, um damit ein C#-Programm in AutoCAD 2005 auszuführen? 1. AutoCAD 2005 (nicht 2004!) 2. Das .NET-Framework 1.1 von Microsoft (Laufzeitumgebung, kostenlos) 3. Das .NET-Framework SDK 1.1 von Microsoft (Compiler, Bibos usw., kostenlos) 4. Den CSharpBuilder 1.0 von Borland (Die Variante 'Personal-NonCommercial' ist ebenso kostenlos) 5. Hilfreich, aber nicht zwingend, ist das ObjectARX SDK 2005 (wegen der Doku) Vorgehensweise: 1. Neues Projekt (Typ 'ClassLibrary') im C#Builder anlegen. 2. Unter 'Verweise/References' diese beiden .NET-Assemblies einbinden: "acdbmgd.dll" und "acmgd.dll" (beide im AutoCAD-Verzeichnis) 3. Programmcode schreiben (s.u.) 4. Projekt-Dll erstellen 5. AutoCAD starten 6. Mit dem AutoCAD-Befehl NETLOAD die erzeugte DLL laden 7. Neuen AutoCAD-Befehl ausführen (Befehl: DrawACircle <-´) Mal ein anderes Beispielprogramm als das HelloWorld:
Code:
using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry;namespace csDrawACircle{ /// <summary> /// Zusammendfassende Beschreibung für Class1. /// </summary> public class DrawACircleClass{ [CommandMethod("DrawACircle")] public static void DrawACircle(){ Database db = Application.DocumentManager.MdiActiveDocument.Database; Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = db.TransactionManager; Transaction tr = tm.StartTransaction(); try{ Circle circle = new Circle(new Point3d(0, 0, 0), new Vector3d(0, 0, 1), 100); circle.ColorIndex = 1; BlockTable bt = (BlockTable)tm.GetObject(db.BlockTableId, OpenMode.ForRead, false); BlockTableRecord btr = (BlockTableRecord)tm.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false); btr.AppendEntity(circle); tm.AddNewlyCreatedDBObject(circle, true); tr.Commit(); CommandLinePrompts.Message("Circle done!" + "\n"); } finally{ tr.Dispose(); } } } }
Wie Achim schon gesagt hat: Der C#Builder macht einen stabileren und ausgereifteren Eindruck als #Develop, das sich ja noch im Prä-irgendwas-Stadium befindet (Release Candidate). Interessanterweise hatte ich aber bei ein paar kleinen Versuchen auch einmal die gleiche, oben schon erwähnte Fehlermeldung wie in #Dev. Vielleicht hängt das auch bloß mit irgendwelchen Zugriffen auf die Assemblies zusammen? Nachdem ich dann AutoCAD geschlossen hatte, ging's wieder... Ein Hinweis, damit sich niemand Frust holt: AutoCAD hat zwar einen NETLOAD-Befehl, aber NETUNLOAD fehlt noch. Das heisst: Anders als bei ARX können die DLLs nicht wieder ausgeladen werden - und daher muss man sowieso vor jedem Neukompilieren AutoCAD schliessen, sonst lässt sich die DLL natürlich nicht überschreiben. Richtig ist natürlich auch Achims Aussage, dass C#Builder nur C# kann - während #Develop auch VB beherrscht. Ich hab's noch nicht ausprobiert, aber für alle, die gern mal spielen wollen, hier das Beispiel in VisualBasic: Code:
Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry Imports DBTransMan = Autodesk.AutoCAD.DatabaseServices.TransactionManagerNamespace DrawACircle Public Class DrawACircle <CommandMethod("DrawACircle")> Public Shared Sub DrawACircle() Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database Dim tm As DBTransMan = db.TransactionManager Dim tr As Transaction = tm.StartTransaction() Try Dim circle As New Circle(New Point3d(0, 0, 0), New Vector3d(0, 0, 1), 10L) Dim bt As BlockTable = CType(tm.GetObject(db.BlockTableId, OpenMode.ForRead, False), BlockTable) Dim btr As BlockTableRecord = CType(tm.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False), BlockTableRecord) btr.AppendEntity(circle) tm.AddNewlyCreatedDBObject(circle, True) Finally tr.Commit() End Try tr.Dispose() Autodesk.AutoCAD.ApplicationServices.CommandLinePrompts.Message("Circle done!" + vbNewLine) End Sub End Class End Namespace
Wie man also deutlich sieht: Das hat mit VB6 oder VBA nicht mehr allzuviel gemeinsam;-) Gruß, Axel Strube-Zettler ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Revit Structure 2011 Acad 2011-deutsch, Express Tools 3ds Max 2011 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 27. Jul. 2004 07:16 <-- editieren / zitieren --> Unities abgeben:
Danke Axel, ich werde einmal ein wenig herumprobieren. Zum Thema C#-Builder, wo finde ich denn die kostenlose Personal-Variante, ich hab nur eine um 69$ gefunden, oder kostet die Downloadversion etwa nichts?. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Revit Structure 2011 Acad 2011-deutsch, Express Tools 3ds Max 2011 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 27. Jul. 2004 07:56 <-- editieren / zitieren --> Unities abgeben:
|
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Revit Structure 2011 Acad 2011-deutsch, Express Tools 3ds Max 2011 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 27. Jul. 2004 13:32 <-- editieren / zitieren --> Unities abgeben:
Interessanterweise kann ich nun unter C#Builder die Anwendung erstellen, aber das Programm erkennt die dll's auch nicht (ich habe auch hier keine Kontextleiste, oder wie immer man das nennt). Siehe Bild im Anhang. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 27. Jul. 2004 20:32 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Tja, Roland, es sieht so aus, als seien weder #Dev noch #Builder in der Lage, ihre Datenbank für die Code Completion zur Laufzeit zu erweitern. Das ist natürlich ein Handicap - nicht unüberwindlich, aber ärgerlich. Ich stecke aber in beiden auch nicht wirklich drin - vielleicht ist ja doch was zu machen, z.B. dass die AutoCAD-Assemblies einmal eingelesen werden und dann zur Verfügung stehen. Da traue ich #Dev eher was zu, immerhin wird da ja die Datenbank bei der Installation 'gebaut' (was bei mir übrigens nur 30 s gedauert hat). Vielleicht kann man da irgendein XML-File anbohren und das nochmal wiederholen. Beim #Builder wird die Datenbank wohl gleich fertig mitgeliefert, deshalb sehe ich da schlechtere Karten. Wie gesagt, ärgerlich, aber die paar AutoCAD-Typen hat man wohl bald sowieso im Kopf. Hauptsache, die code completion funktioniert für das Framework, denn das hat ja jetzt schon echt monströse Ausmaße, und das soll mit Version 2.0 nochmal deutlich zulegen. Gravierender erscheint mir, dass ich weder in #Dev noch in #Builder eine Entsprechung für den Object Browser von Visual Studio finde. Im #Builder gibt es zwar das Fenster 'Objektinspektor', das bleibt bei mir aber immer leer, und in der Hilfe finde ich nichts dazu. Falls das in der Gratisversion genauso abgeklemmt ist wie das Design-Fenster, dann ist das eine herbe Einschränkung. Tja, da ist Pioniergeist angesagt;-) Axel Strube-Zettler ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Revit Structure 2011 Acad 2011-deutsch, Express Tools 3ds Max 2011 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 28. Jul. 2004 07:37 <-- editieren / zitieren --> Unities abgeben:
Ich glaube schön langsam ich sollte mit AutoCAD noch etwas warten, ich hab mir deine Beispiele angesehen und da gibt es doch ein paar Unterschiede (zu VBA, was allerdings sowieso klar war) die ohne ObjectBrowser und dergleichen ja nicht gerade so leicht zu erlernen sind. Das heißt, erst mal in C# reinknien und dann vielleicht die billige Version von VS abwarten. Ich Danke dir nochmal für deine Bemühungen. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 28. Jul. 2004 14:33 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Nicht gleich aufgeben, Roland. Das Wichtigste sind erstmal die Hilfen aus dem ObjectARX-SDK. Da ist ja eine vollständige Doku aller bisher fertigen "Managed Wrapper Classes" drin, und natürlich die dahinter liegenden ObjectARX-Klassen ebenso. Aber mit C# selbst musst du dich natürlich sowieso befassen, vor allem mit Dingen z.B. den "Attributes", also sowas hier: Code:
[CommandMethod("DrawACircle")] public static void DrawACircle(){ ... }
Das sind ja Sachen, die völlig neu sind. Ich werde wohl demnächst mal ein kleines 'richtiges' Beispiel hier anbieten, nämlich eine .NET-Variante des SysVar-Tools, das ich neulich im Lisp-Forum reingestellt habe. Mit Dialog und speichern als XML. Gruß, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Revit Structure 2011 Acad 2011-deutsch, Express Tools 3ds Max 2011 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 28. Jul. 2004 14:51 <-- editieren / zitieren --> Unities abgeben:
Das wäre wirklich toll von dir, ehrlich gesagt möchte ich gar nichts mehr in VBA herumtüfteln, ich bin schon ganz auf C# abgefahren. Es raucht mir am Abend jedesmal der Kopf wegen der vielen neuen Dinge die da auf mich einbrechen. Aber es macht richtig Spaß. Danke!!! ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Revit Structure 2011 Acad 2011-deutsch, Express Tools 3ds Max 2011 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 29. Jul. 2004 07:49 <-- editieren / zitieren --> Unities abgeben:
Es lässt mich einfach nicht ruhig schlafen. Ich habe jetzt einmal Mike Krueger (Main SD coder) gemailt. Er hat mich auf ein kleines Programm hingewiesen Reflector for .NET das die dll's ohne probleme erkennt, darum liegt das Problem warscheinlich bei #Develop. Ich halte euch weiter auf dem Laufenden. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 30. Jul. 2004 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
|
tmoehlenhoff Ehrenmitglied V.I.P. h.c. Gutzum, CAD-Therapeut und BIM-Priester ;-)
Beiträge: 2996 Registriert: 14.10.2002 ATD 2 bis 2007
|
erstellt am: 10. Aug. 2004 23:32 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Zitat: Original erstellt von mapcar: Ein Hinweis, damit sich niemand Frust holt: AutoCAD hat zwar einen NETLOAD-Befehl, aber NETUNLOAD fehlt noch.
Laut Autodesk soll man das in den Griff kriegen können wenn man sich ein bootstrapper assembly schreibt, welches 2 commands enthält (mynetload und mynetunload), eine eigene AppDomain erzeugt und die eigene (eigentliche) assembly dann in diese appdomain lädt (denn im dotnet können keine dlls sondern nur appdomais entladen werden). mynetunload entlädt dann also die eigentliche assembly... Leider waren alle meine bisherigen Versuche in dieser Richtung wenig (sprich gar nicht) erfolgreich. Falls also da noch jemand Ideen hat ... sayonara Torsten Möhlenhoff ACAD-Systemhaus Bremen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 11. Aug. 2004 01:26 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Hi Torsten, willkommen im Club. Klingt irgendwie logisch... Aber ehrlich gesagt, hab ich mich mit dem dynamischen Laden von Assemblies bisher überhaupt nicht befasst;-) Irgendwie soll es sogar eine Möglichkeit geben, ein AutoLoad zu implementieren (was natürlich im krassen Gegensatz zu dieser Unload-Möglichkeit stehen würde), denn das würde 'hart' in Acad laden. Na ja, kommt Zeit, kommt Rat... Ach ja, da wir grad wieder in diesem Thread sind: Natürlich haben sowohl #dev als auch c#builder ein Design-Fenster. Beim Builder habe ich es einfach lange übersehen, weil es nirgendwo im Menü auftaucht und auch nicht in der Hilfe - aber wenn man eine Form-Datei aufhat, gibt es unten zwei Tabs zum Wechseln zwischen Designer + Code. Und bei #dev tauchte es dann auch irgendwo auf, weiss nicht mehr wo, aber es kam. Das von mir angekündigte SysVar-Beispiel kommt in den nächsten Tagen - reichlich unfertig allerdings:-( Ich habe mich da völlig verschätzt, es sollte ein kleines Sample werden, das ich eigentlich in ein paar Stunden erledigen wollte. Aber was für ein Chaos! Die .NET-Schnittstelle bietet einige Variablen, die ich in AutoCAD noch nie gesehen habe, andere wurden wohl vergessen, und die, die eigentlich klar sein sollten, haben einfach andere Namen;-) Tja, Torsten, wenn du das 'mynetunload' fertig hast, sag Bescheid;-) Ist schon lästig, wenn man beim Testen ständig neu starten muss. Gruß, Axel Strube-Zettler ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002
|
erstellt am: 11. Aug. 2004 05:52 <-- editieren / zitieren --> Unities abgeben: Nur für RoSiNiNo
Zitat: Original erstellt von mapcar: ...Das von mir angekündigte SysVar-Beispiel kommt in den nächsten Tagen - reichlich unfertig allerdings:-( Ich habe mich da völlig verschätzt, es sollte ein kleines Sample werden, das ich eigentlich in ein paar Stunden erledigen wollte. Aber was für ein Chaos! ...
Willkommen im Club
------------------ Grüße daywa1k3r Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|