Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Probleme mit Klassenverweisen zu verschiedenen Assemblys

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:  Probleme mit Klassenverweisen zu verschiedenen Assemblys (2093 mal gelesen)
fewoer
Mitglied



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

Beiträge: 28
Registriert: 09.01.2012

AutoCAD Architecture 2011
Graitec Advance Steel 2012
Windows Vista 64 Bit

erstellt am: 10. Aug. 2012 10:54    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,

und wieder mal ein Verständnisproblem meinerseits - glaube ich zumindest.

Ziel wäre, einen Träger mittels Graitec Advance Steel 2012 in AutoCAD zu erstellen. Das wollte ich über Befehle an die Kommandozeile von AutoCAD realisieren. Zuerst den Befehl, um den Träger zu verlegen. Dann Enter, dann die Koordinaten des Startpunkts, Enter, die Koordinaten des Endpunkts, Enter.

Ob das so funktioniert oder nicht, weiß ich bisher garnicht.

Ich habe erstmal folgendes Problem - Visual Basic 2010 Express spuckt mir 3 Warnungen aus:
1. Nicht verwendete lokale Variable: "acadapp"
2. Nicht verwendete lokale Variable: "sysapp"
3. Zugriff des freigegebenen Members, konstanten Members, Enumerationsmembers oder geschachtelten Typs über eine Instanz; der qualifizierende Ausdruck wird nicht ausgewertet. (in der Zeile mit "Dim app As AcadApplication = acadapp.AcadApplication", acadapp.AcadApplication ist unterstrichen)

Das passiert irgendwie, weil es in den Assemblys System.Windows.Forms und Autodesk.AutoCAD.ApplicationServices jeweils die Klasse "Applications" gibt. Ich habe dann versucht, das zu trennen. Das haut aber nicht so ganz hin, wie ich mir das vorgestellt habe. Wo könnte sich mein Hirn denn da verstrickt haben? Habe ich das überhaupt richtig verstanden?

Vielen Dank für etwaige Gedankenanstöße 

Und hier der Code:

Code:

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Interop
Imports System.Windows.Forms

Public Class FETRAG

    <Autodesk.AutoCAD.Runtime.CommandMethod("fetrag", CommandFlags.Session)> _
    Public Shared Sub fetrag()

        ' Trennung Klassenverweis von "Application" aus den unten genannten Assemblys
        Dim acadapp As Autodesk.AutoCAD.ApplicationServices.Application
        Dim sysapp As System.Windows.Forms.Application
        Dim app As AcadApplication = acadapp.AcadApplication

        ' Kommando an AutoCAD übergeben, um im aktiven Zeichnungsfenster einen Träger zu erstellen
        app.ActiveDocument.SendCommand("_astm4crbeambyclass I")
        SendKeys.Send("{enter}")       
        app.ActiveDocument.SendCommand("0,0,0")
        SendKeys.Send("{enter}")       
        app.ActiveDocument.SendCommand("1000,0,0")
       
    End Sub

End Class


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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 10. Aug. 2012 11:26    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 Nur für fewoer 10 Unities + Antwort hilfreich


vbNetFehler.gif

 
Hallo fewoer,

mal 'ne grundsätzliche Frage: Wenn du nur mit SendCommand arbeitest, gibt es doch auch sehr viel einfacherer Möglichkeiten, diese Makro's zu hinterlegen.
1-Menübefehl: ^C^C_astm4crbeambyclass;I;0,0,0;1000,0,0
2-Lisp (command "_astm4crbeambyclass" "I" "0,0,0" "1000,0,0")

Warum schreibst du das in VB.Net?
Das ist die komplizierteste Umgebung, um eine Command-Abfolge zu realisieren.

Grüße!
Holger

Zitat:
Original erstellt von fewoer:
... 3. Zugriff des freigegebenen Members, konstanten Members, Enumerationsmembers oder geschachtelten Typs über eine Instanz; der qualifizierende Ausdruck wird nicht ausgewertet. (in der Zeile mit "Dim app As AcadApplication = acadapp.AcadApplication", acadapp.AcadApplication ist unterstrichen)
[/code]


Welche Fareb hat die Unterstreichung?
(Bei Standard-Einstellungen): Grün - Hinweis | | Blau - Fehler

Und was steht unter der Meldung? -> Ich denke, die ist identisch mit dem anbei befindlichem ScreenShot. Da steht ja auch, was zu tun ist.


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

fewoer
Mitglied



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

Beiträge: 28
Registriert: 09.01.2012

AutoCAD Architecture 2011
Graitec Advance Steel 2012
Windows Vista 64 Bit

erstellt am: 10. Aug. 2012 12:20    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 Holger!

danke dir vielmals, der Screenshot hat sehr geholfen. Damit haben sich dann die u.g. Einträge erledigt - das wäre ja dann doppelt gemoppelt, wie ich das verstanden habe. Bei mir in Visual Basic waren die Fehlermeldungen übrigens grün unterstrichen, also wohl nur Hinweise, wie du sagst.

Code:

'Dim acadapp As Autodesk.AutoCAD.ApplicationServices.Application
'Dim sysapp As System.Windows.Forms.Application

Warum ich das ganze in VB.Net schreibe, hab ich mir wegen folgendem überlegt. Der Code wäre in LISP oder über Makros doch ziemlich leicht einzusehen - ein Texteditor und man sieht wie programmiert wurde. VB.Net Code wird dagegen kompiliert, bevor er in AutoCAD geladen wird. Da ist es zumindest schon mal nicht mehr ganz so einfach, Reverse Engineering zu betreiben.

Ein weiterer Grund wäre, dass ich doch mehr Möglichkeiten in VB.Net habe, oder? Ich kann im AutoCAD damit Code über mehrere Fenster hinaus ausführen, was doch in LISP irgendwie schon mal nicht geht, der beschränkt sich doch nur auf das aktive Fenster? Und ich könnte mit VB.Net einfacher "richtige" Excel-Dateien erstellen oder einlesen, also nicht diese CSV-Excel-Dateien.

Oder ist das ein Trugschluss, dass VB.Net einem die meisten Möglichkeiten bietet? Außerdem ist es sicher auch nicht schlecht, sich da ein bißchen reinzuarbeiten - man muss ja schließlich mit etwas einfachem anfangen.

Liebe Grüße!
Patrick

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 10. Aug. 2012 12:41    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 Nur für fewoer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von fewoer:
... Warum ich das ganze in VB.Net schreibe, hab ich mir wegen folgendem überlegt. Der Code wäre in LISP oder über Makros doch ziemlich leicht einzusehen - ein Texteditor und man sieht wie programmiert wurde. VB.Net Code wird dagegen kompiliert, bevor er in AutoCAD geladen wird. Da ist es zumindest schon mal nicht mehr ganz so einfach, Reverse Engineering zu betreiben.

Ein weiterer Grund wäre, dass ich doch mehr Möglichkeiten in VB.Net habe, oder? Ich kann im AutoCAD damit Code über mehrere Fenster hinaus ausführen, was doch in LISP irgendwie schon mal nicht geht, der beschränkt sich doch nur auf das aktive Fenster? Und ich könnte mit VB.Net einfacher "richtige" Excel-Dateien erstellen oder einlesen, also nicht diese CSV-Excel-Dateien.

Oder ist das ein Trugschluss, dass VB.Net einem die meisten Möglichkeiten bietet? Außerdem ist es sicher auch nicht schlecht, sich da ein bißchen reinzuarbeiten - man muss ja schließlich mit etwas einfachem anfangen.


Hallo Patrick,

ja, das ist ein Trugschluss:
- Entwicklungsumgebung ist im AutoCAD integriert: Befehl: VLIDE
- in der Entwicklungsumgebung kann man Lisp-Dateien kompilieren (VLX) Im Unterschied zu den .Net-DLLs können diese VLX-Dateien nicht dekompiliert werden. (da ist VLX deutlich sicherer als DLL
- Excel-Dateien kannst du mit VisualLisp genauso schreiben wie in .Net - Weil es in beiden Umgebungen ohnehin nur via ActiveX (COM) geht
- Der zeichnungsübergrifende Zugriff ist von Lisp aus ebenso möglich. Du kannst weder hier noch da Commands in einer beim Programmstart inaktiven Zeichnung absetzen.

Fazit: Für das was du vor hast .. geht beides, Lisp erscheint mir allerdings weniger kompliziert

Noch Fragen ..

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

fewoer
Mitglied



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

Beiträge: 28
Registriert: 09.01.2012

AutoCAD Architecture 2011
Graitec Advance Steel 2012
Windows Vista 64 Bit

erstellt am: 10. Aug. 2012 13:11    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

Ah okay, danke für die Infos. Wusste ich garnicht, dass man LISPs auch kompilieren kann 

Aber dann braucht man VB.Net ja überhaupt nicht, oder? Die einzige Daseinsberechtigung, die mir dafür gerade einfällt wäre ja dann Leuten, die schon VB.Net Erfahrung haben und noch kein LISP können, den Zugang zur AutoCAD Automation zu erleichtern.

Weil wenn mir LISP ja schon alle Möglichkeiten bietet, dann brauche ich mir ja jetzt eigentlich nicht die Mühe machen und mich in VB.Net hineinzuvertiefen 

Liebe Grüße,
Patrick

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 13. Aug. 2012 15:02    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 Nur für fewoer 10 Unities + Antwort hilfreich

... Naja, so ganz will ich das nicht unterschreiben.
Mit .Net kommt man schon einige Ebenen tiefer in das System rein. Man hat Zugriff auf das Framework, was eben schon ganz andere Bibliotheken enthält. (Datenbankzugriffe, XML, Bildbearbeitung, Dateizugriffe um nur die gebräuchlichsten zu nennen).
Es gibt in Bezug auf AutoCAD aber eben auch Geschichten wie das Overruling, Werkzeugpaletten, Dialoggestaltung (zusätzliche Registerkarten in die Optionen integrieren), die mit Lisp nicht zu realisieren sind. Die Frage ist aber, ob man das denn tatsachlich brauch?
Ich persönlich bevorzuge inzwischen .Net, weil hier das Codehandling (Aufbau von Bibliotheken, Zugriff darauf) einfacher ist. Zudem ist der Programmdurchlauf sehr viel schneller, besonders wenn man die komplette Zeichnungsdatenbank bearbeiten muss.
Ich will aber nicht verheimlichen, dass manche Dinge mit Lisp einfacher, mit viel weniger Codezeilen, umzusetzen sind. Außerdem sind die .Net Programme mitunter Platform und Versionsabhängig - was sehr viele Schwierigkeiten bereiten kann.
Da die Windows-Sicherheitseinstelungen, das Laden von .Net-DLLs aus dem Netzwerk verhindern, ist auch die Softwareverteilung ein Punkt, der neu organisiert werden muss. Lisp-Dateien können ja bekanntlich von überall geladen werden.

Man kann also nicht absolut sagen, dass .Net unnötig ist oder Lisp zu bevorzugen. Es hat beides seine Daseinsberechtigung - jedes hat Vorteile in bestimmten Zielstellungen.

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

fewoer
Mitglied



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

Beiträge: 28
Registriert: 09.01.2012

AutoCAD Architecture 2011
Graitec Advance Steel 2012
Windows Vista 64 Bit

erstellt am: 29. Aug. 2012 11:12    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

Okay, ich habe mich jetzt ein bißchen mit VB.Net auseinandergesetzt und stelle fest - wenn man sich mal ein bißchen reingearbeitet hat, ist es für mich leichter Programmabläufe nachzuvollziehen als in LISP. Ist vielleicht auch nur der IDE geschuldet, ich benutze MS VB 2010 Express. Da ist alles noch einen Ticken bunter als in VLisp, hilft mir bei der Übersicht und der Organisation der Programmstrukturen. Wobei mich manches auch noch verwirrt - beispielsweise verstehe ich nicht, wieso VB.Net erst zoomen will, wenn das ganze restliche Programm schon durchgelaufen ist. Obwohl der Zoom bei Programmbeginn steht, macht er es immer zuletzt. Selbst wenn ich ein Wait einbaue nach dem Zoombefehl... dann wartet er, führt das restliche Programm aus und dann zoomt er 

Aber was du in deinem letzten Post sagst, kann ich so bestätigen. Hatte auch den Eindruck, dass VB.Net fixer ist als LISP. Auch das Framework bietet schon einige ganz angenehme Bibliotheken, die mir vieles erst ermöglicht haben, was ich bei LISP einfach nicht hinbekommen habe. Auch wenn ich jetzt noch nicht so tief eingestiegen und von Overruling etc. keine Ahnung habe.

Immerhin hat man ja noch die Möglichkeit, einfache Strukturen in LISP zu realisieren und die dann aus dem VB.Net Programmteil aufzurufen. Damit hat man ja dann die Vorteile beider Welten.

Gruß!

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