Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Layergroups, Preferences

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:  Layergroups, Preferences (366 mal gelesen)
veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 12. Mrz. 2009 10:10    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!
Wie handhabt man in .NET Layergruppen?
über die COM Schnittstelle sah das bei mir so aus:

If InStr(Thisdrawing.GetVariable("acadver"), "17.1") > 0 Then
                Thisdrawing.SendCommand("-amlayer" & vbCr & "_group" & vbCr & "_new" & vbCr & LayGroupName & vbCr)
                Thisdrawing.SendCommand("_set" & vbCr & LayGroupName & vbCr & vbCr & vbCr)
                Thisdrawing.SendCommand("-amlayer" & vbCr & "_object" & vbCr & "CENN" & vbCr)
                Thisdrawing.SendCommand("-amlayer" & vbCr & "_object" & vbCr & "HIDN" & vbCr)
            ElseIf InStr(Thisdrawing.GetVariable("acadver"), "17.2") > 0 Then
                Thisdrawing.SendCommand("-amlayergroup" & vbCr & "_group" & vbCr & "_new" & vbCr & LayGroupName & vbCr)
                Thisdrawing.SendCommand("_set" & vbCr & LayGroupName & vbCr & vbCr & vbCr)
                Thisdrawing.SendCommand("-amlayergroup" & vbCr & "_object" & vbCr & "CENN" & vbCr)
                Thisdrawing.SendCommand("-amlayergroup" & vbCr & "_object" & vbCr & "HIDN" & vbCr)
            End If

sind Layergruppen auch normale Einträge in der Layertable?
ich führe viele Befehle über SendCommand aus, ist das weiterhin zu empfehlen, oder gibt es eine bessere Möglichkeit?

weiteres Beispiel:
Vorlagenzeichnung laden:
ThisDrawing.SendCommand("amsetupdwg" & vbCr & Vorlagenzeichnung & vbCr & "_no" & vbCr)


Hat jemand schon mit den Preferences von Autocad gearbeitet? bzw wie man darauf zugreifen/verändern kann.

mfg

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


Ex-Mitglied

erstellt am: 12. Mrz. 2009 11:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ganze Menge Fragen für einen Thread, aber versuchen wir mal 

Zitat:
Wie handhabt man in .NET Layergruppen?
Ich hab's mir noch nicht angesehen, glaube aber schon mal hier (CAD-de) einen Hinweis darauf gesehen zu haben, dass sich diese im Prinzip auf Dictionary-Basis gespeicherte Info's sind, müsste man halt suchen.

Zitat:
ich führe viele Befehle über SendCommand aus, ist das weiterhin zu empfehlen, oder gibt es eine bessere Möglichkeit?
...nicht zu empfehlen (und eigentlich auch nicht mit COM), bei dotNET ist es grundsätzlich ohne große Tricks nicht möglich, ein SendCommand synchron zu starten, sprich WÄHREND Dein Code abgearbeitet wird.
Das bedeutet es wird das SendCommand auf einen Befehlspuffer gelegt, und wenn Dein dotNET-Befehl abgearbeitet/fertig ist, dann erst starten die am Stack liegenden SendCommand-Befehle. Die Logik dahinter ist eigentlich, dass (ausser transparente Befehle) nur ein Befehl im AutoCAD aktiv sein kann, d.h. wenn Dein Befehl schon aktiv ist, dann kann während dieser Befehlsaktivität nicht auch noch ein anderer Befehl aktiv sein.

Nebenbei kannst Du den Erfolg von SendCommand oft nicht überwachen, wo es möglich ist, sollte natürlich direkt via ManagedAccess zugegriffen werden. Natürlich Ausnahmen bestätigen die Regel ;)

Zitat:
Hat jemand schon mit den Preferences von Autocad gearbeitet?
Ja, aber nachdem es nicht um Performance geht, wenn ich AutoCAD-Programmeinstellungen abfrage oder setze, geht das hier über COM, weniger Code, leichterer Zugriff.

HTH, - alfred -

------------------
www.hollaus.at

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 12. Mrz. 2009 12:33    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

ok, ich such mal danach und wenn ich es finde gebe ich den link rein.

Naja viele Befehle gehen halt schnell wenn man ein SendCommand macht.
Bzw sie sind auch schnell implementiert, denn herauszufinden wie man über die Befehlszeile z.b die Vorlagenzeichnung lädt, geht schneller als es in .NET herauszufinden.

Es ist ja nicht sinnvoll in einer .dll zwischen COM und NET zu wechseln oder.
Ich habe da auf manchen Rechnern große Probleme, dass er die Typen konvertieren kann.
Daher ist es wohl besser wenn ich einen Teil in .Net mache, dass ich gleich alles darin mache.

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


Ex-Mitglied

erstellt am: 12. Mrz. 2009 12:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi, 
Zitat:
Es ist ja nicht sinnvoll in einer .dll zwischen COM und NET zu wechseln oder.
...kann man durchaus, ist manchmal sogar notwendig, es ist nur darauf zu achten, dass nicht innerhalb einer ManagedAccess-Aktion (hinterücks) das gerade bearbeitete Objekt über COM modifiziert wird.

Solange Du es getrennt halten kannst, ist es absolut OK und gefahrenlos.

Als Beispiel: ich hatte die Aufgabe, eine Linie zu einem neu eingefügten Block mit Attributen zu machen, die Linie sollte zum Mittelpunkt des Attributs hinzeigen, obwohl ich zu diesem Zeitpunkt nicht wußte (oder zumindest davon ausgehen mußte) mit welchem Alignment das Attribut in der Blockdefinition erstellt ist. Der Weg führte daher über die Extents der Attributreferenz und aus den Extents bekomme ich dann den Mittelpunkt.

Problem (dank Autodesk) ist, dass die Extents des Attributs mit ManagedAccess immer als Extents.MinPnt mit 0,0,0 lieferten. Wenn ich aber die Extents über COM abgefragt habe, dann kamen die richtigen Werte zurück, und damit habe ich das Objekt mit MangedAcess erstellt, dann von der COM-abgeleiteten Version mir die Extents ermitteln lassen und gut war (ausser dass meine ...-Gedanken über Autodesk nicht so schnell verraucht waren  )


Noch was: wenn ich Deine SendCommands ansehe (z.B. 'amlayer'), dann nehme ich mal an, dass Du irgendwas mechanical-artiges installiert hast, maybe (ich weiss es nicht, hab es nicht) hast Du dort zusätzliche *mdg.dll, die Dir dabei helfen können.

- alfred -

------------------
www.hollaus.at

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 18. Mrz. 2009 15:00    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

ok, aber könntest du mir trotzdem kurz schreiben, wie man im .NET auf die Preferences einer Application kommt?

mfg

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


Ex-Mitglied

erstellt am: 18. Mrz. 2009 15:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi, 
Zitat:
könntest du mir trotzdem kurz schreiben

Gerne, so wie ich es machen würde: ;)

Code:
Dim tAcadPref As Interop.AcadPreferences = CType(Autodesk.AutoCAD.ApplicationServices.Application.Preferences, Interop.AcadPreferences)
Debug.Print(tAcadPref.Display.CursorSize.ToString)
Debug.Print(tAcadPref.Files.SupportPath)
Debug.Print(tAcadPref.Selection.DisplayGrips.ToString)

Hoffe es genügt, - alfred -

------------------
www.hollaus.at

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 18. Mrz. 2009 15: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

ja über die COM, gibt es da in .NET keinen Weg?

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


Ex-Mitglied

erstellt am: 18. Mrz. 2009 22:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ich hab auf die Schnelle keinen Weg gefunden, sorry

- alfred -

------------------
www.hollaus.at

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