| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: AcadSpline in ObjectARX.Curve umwandeln (1657 mal gelesen)
|
GDMaster Mitglied
Beiträge: 13 Registriert: 28.11.2012
|
erstellt am: 28. Nov. 2012 09:05 <-- editieren / zitieren --> Unities abgeben:
Hallo erstmal. Ich arbeite an einem "eigenständigem" Programm in VB.net welches über COM auf AutoCAD zugreift und u.A. Splines berechnet und anzeigt. Dies klappt auch sehr gut. Nun benötige ich von einem Spline aus meinem Programm (vorzugsweiße ohne erst in AutoCAD den Spline auswählen zu müssen) Parameter äquidistant über den Spline verteilt. In meiner Vorgängerversion des Programms,geschrieben in VBA, benutzte ich hierfür LISP. Leider funktioniert LISP wohl nicht mit VB.net, oder ich bin zu blöd dafür. Nach etwas wühlen in Google bin ich auf ObjectARX gestoßen. Hier gibt es die mir aus LISP bekannte Funktion GetParameterAtDistance. Leider bekomme ich es nicht hin meinen Spline so in ein curve-Objekt zu wandeln, damit ich Zugriff auf die Funktion habe:-( Alternativ habe ich versucht, den berechneten Spline über den Editor direkt als curve-Objekt einzulesen, aber auch dies läuft nicht richtig. Allerdings bringt mein VB auch eine Warnung, die da lautet: Die Assembly "acmgd", aufdie verwiesen wird, konnte nicht aufgelöst werden, da sie eine Abhängigkeit von "System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" aufweist (nicht im aktuellen Zielframwork) Wärend dem Programmieren findet er die Namespaces der 3 ObjectARX.dll's, sobald ich es starte jedoch nicht mehr, was dann zu einer Fehlermeldung führt. Ich hoffe ihr könnt mir weiterhelfen! Achso zu meinen Daten: Ich benutze AutoCAD Mechanical 2011 und Microsoft Visual Basic 2010 Express. [Diese Nachricht wurde von GDMaster am 28. Nov. 2012 editiert.] 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: 28. Nov. 2012 09:12 <-- editieren / zitieren --> Unities abgeben: Nur für GDMaster
Hallo GDMaster, .Net-seitig stehen diese ganzen Curve-Funktionen zur Verfügung. Du könntest also eine .Net-Applikation für AutoCAD schreiben und dann von deiner VB-Applikation den Befehl im AutoCAD starten. Alternativ, kannst du aber auch in .Net die DLL für COM-Zugriffe sichtbar machen, dann kannst du direkt aus deiner VB-Applikation darauf zugreifen. 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 |
GDMaster Mitglied
Beiträge: 13 Registriert: 28.11.2012
|
erstellt am: 28. Nov. 2012 09:26 <-- editieren / zitieren --> Unities abgeben:
WOW, das ging ja wirklich richtig schnell! Leider hilft es mir nicht wirklich. Mein Problem liegt jedoch mehr dadrin, wie ich ein Autodesk.AutoCAD.Interop.Common.AcadSpline Objekt (Splineobjekt direkt von AutoCAD) in ein curve-Objekt von aus ObjectARX bekomme um auf die Funktionen zuzugreifen. Noch ne andere Frage, muss ich ObjectARX noch installieren (lassen), wenn die acCui.dll, acdbmgd.dll und acmgd.dll bereits im AutoCAD-Ordner liegt? Evtl. ist das auch noch Teil der Lösung meines Problems^^
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: 28. Nov. 2012 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für GDMaster
... du musst ObjectARX nicht installieren. Es genügen die Verweise auf die DLL's aus deinem Acad-Installationsordner. Achte aber darauf, dass du die Lokale Kopie auf False setzt. ... du kannst doch bestimmt die Handle auslesen. Mit dieser Handle, kannst du dann die ObjectId ermitteln und über die ObjectId kannst du dann das Objekt öffnen und entsprechend Casten auf das Vurve-Object. 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 |
GDMaster Mitglied
Beiträge: 13 Registriert: 28.11.2012
|
erstellt am: 28. Nov. 2012 09:39 <-- editieren / zitieren --> Unities abgeben:
Die Verweise hab ich schon gesetzt. Lokale Kopie auf false hab ich auch schon eingestellt. Leider kommt eben die Warnung s.o. wodurch je nach Versuch mein Programm garnicht startet oder die Fehlermeldung FileNotFoundException(Die Datei oder Assembly "acadmgd, Version=18.1.0.0, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegeben Datei nicht finden.) Meine bisherigen Codeversuche:
Code:
oSpline = oAutoCAD.ModelSpace.AddSpline(dPunkte, dTangente1, dTangente2) Dim curve1 As Autodesk.AutoCAD.Geometry.Curve3d = Autodesk.AutoCAD.Geometry.Curve3d.Create(CType(oSpline.ObjectID, IntPtr), False) MsgBox(curve1.GetLength(0, 1, 0.01))
Da kommt diese FileNotFoundExeption.Code:
Dim editor As Autodesk.AutoCAD.EditorInput.Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor Dim entity As Autodesk.AutoCAD.EditorInput.PromptEntityResult = editor.GetEntity("Spline auswählen") Dim trans As Autodesk.AutoCAD.DatabaseServices.Transaction = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction() Dim kurve As Autodesk.AutoCAD.DatabaseServices.Curve = CType(trans.GetObject(entity.ObjectId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead), Autodesk.AutoCAD.DatabaseServices.Curve) MsgBox(kurve.GetParameterAtDistance(1))
Hier kommt die Fehlermeldung vor dem Ausführen, da er die Zuordnung zu den DLLs scheinbar verliert:-(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: 28. Nov. 2012 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für GDMaster
|
GDMaster Mitglied
Beiträge: 13 Registriert: 28.11.2012
|
erstellt am: 28. Nov. 2012 09:47 <-- editieren / zitieren --> Unities abgeben:
In meinen Verweisen stehen alle DLL's auf C: Netzlaufwerk daher eher unwarscheinlich, oder? Zudem nehm ich gern noch weitere Vorschläge an, wie ich Parameter mit konstantem Abstand erhalten kann. Evtl. mach ich ja beim Umwandeln ja auch noch was grundlegend falsch... Ich seh gerade, bei der 1. Version kommt noch folgende 2. Warnung: Beim erstellen der Assembly "Projekt" wurde möglicherweise ein Problem entdeckt: Die Assembly acdbmgd.dll, auif die verwiesen wird, hat einenen anderen Zeilprozessor. [Diese Nachricht wurde von GDMaster am 28. Nov. 2012 editiert.] 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: 28. Nov. 2012 10:08 <-- editieren / zitieren --> Unities abgeben: Nur für GDMaster
die Ergebnis-DLL's müssen lokal laufen. Woher du die Verweise ziehst, das ist egal. Wenn du auf Acad-2012/2013 zugrifen willst, ist das VS2010 + Framework 4.0 erforderlich. Du musst also dein Zielframework ändern. 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 |
GDMaster Mitglied
Beiträge: 13 Registriert: 28.11.2012
|
erstellt am: 28. Nov. 2012 10:22 <-- editieren / zitieren --> Unities abgeben:
So, hab jetzt mein kompletten Prjektordner aufn Desktop gezogen und von da gestartet, damit es nicht mehr aufm Netzlaufwerk liegt. Kommt aber immernoch die FileNotFoundException:-( Wie kann ich den feststellen, ob framework 4.0 schon installiert ist oder nicht? Und ist es möglich, dass ich des installier und dann mein code schon läuft? 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: 28. Nov. 2012 10:25 <-- editieren / zitieren --> Unities abgeben: Nur für GDMaster
|
GDMaster Mitglied
Beiträge: 13 Registriert: 28.11.2012
|
erstellt am: 28. Nov. 2012 10:36 <-- editieren / zitieren --> Unities abgeben:
Also Framework ist drauf. Habs vorsichtshalber überprüft, da ich nur Visual Basic 2010 und AutoCAD 2011 habe. Komme aber mit meinem Proglem trotzdem nicht vorran [Diese Nachricht wurde von GDMaster am 28. Nov. 2012 editiert.] 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: 28. Nov. 2012 10:47 <-- editieren / zitieren --> Unities abgeben: Nur für GDMaster
... für Acad-2011 reicht 3.5. + VS2008. Du kannst (meines Wissens) aus einem 2010 keine Applikation für Ac-2011 basteln. Warum machst du denn keine eigenständige DLL-die nur die ACAD-Spline-Funktionen übernimmt. (1) Machst die für COM sichtbar, und übergibst als Parameter lediglich die Handle, der gerade erstellten Spline? oder (2) rufst einen darin integrierten Lisp-Befehl über SendCommand (SendStringToExecute?) mit dem Parameter Handle auf? 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 |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 28. Nov. 2012 10:49 <-- editieren / zitieren --> Unities abgeben: Nur für GDMaster
|
GDMaster Mitglied
Beiträge: 13 Registriert: 28.11.2012
|
erstellt am: 28. Nov. 2012 11:05 <-- editieren / zitieren --> Unities abgeben:
Dein Link funktioniert leider nicht:-( Ich habe jetzt von .NET Framework 4 Client Profile auf .NET Framework 4 umgestellt und schwub ist die Warnung verschwunden. Leider läufts trotzdem nicht... Ich kann zwar programmieren, kenn mich aber 0 mit dll's erzeugen etc. aus. Zudem meine ich, dass Mein Visual Basic 2010 Express keine dll's machen kann, oder? Des weiteren kommt hinzu, dass ich in Zukunft mit meinem Programm eine Interaktion zwischen AutoCAD und Inventor herstellen soll. Daher möchte ich nicht zu sehr an AutoCAD gebunden sein/werden. Über eine eigene exe und die COM für AutoCAD hat mir gut gefallen. LISP habe ich in meinem Prototyp per Verweis (denke auch COM) relisiert gehabt. Das läuft aber jedoch nicht in meim VB.Net:-( Bei meiner InetRecherche bin ich dann eben über ObjectARX gekommen. Letztlich ist mir egal, wie ich an die Parameterwerte komme - solange es funktioniert... Was com sichtbar machen heißt oder wie ich des mach weiß ich nicht, sry. Sollte aber solang es iwann läuft egal sein... 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: 28. Nov. 2012 11:08 <-- editieren / zitieren --> Unities abgeben: Nur für GDMaster
|
| Werkstudent:in Digital Systems / CAD | 100.000 Produkte und Werkzeuge aus den starken Metallen Wolfram und Molybdän: das ist seit über 100 Jahren unsere Mission und unsere Leidenschaft, die 11.000 Mitarbeiter:innen aller Welt teilen. Wir von der Plansee Group haben noch viel vor ? und werden mit Ihnen noch besser! Werden Sie Teil unseres Teams!
In der Position als Werkstudent:in Digital Systems CAD erwarten Sie spannende Aufgaben in einem innovativen Umfeld.... | Anzeige ansehen | Maschinenbau |
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 28. Nov. 2012 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für GDMaster
|