| | | 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
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 12. Mrz. 2009 10:10 <-- editieren / zitieren --> Unities abgeben:
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 / zitieren -->
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
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 12. Mrz. 2009 12:33 <-- editieren / zitieren --> Unities abgeben:
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 / zitieren -->
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
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 18. Mrz. 2009 15:00 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 18. Mrz. 2009 15:20 <-- editieren / zitieren -->
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
Beiträge: 252 Registriert: 29.05.2008 AutoCAD/Mechanical 2009, Inventor 2009
|
erstellt am: 18. Mrz. 2009 15:26 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 18. Mrz. 2009 22:36 <-- editieren / zitieren -->
Hi, ich hab auf die Schnelle keinen Weg gefunden, sorry - alfred - ------------------ www.hollaus.at |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|