| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Elemente an befehlszeile übergeben (2774 mal gelesen)
|
RalphRX8 Mitglied Kontruktionsbüro
Beiträge: 333 Registriert: 17.11.2004 AutoCAD-Mechanical 2017, SolidEdge ST8
|
erstellt am: 21. Mrz. 2007 19:27 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ich habe folgendes Problem: Ich möchte mit der Mechanical-Desktop Funktion _AMSweepSF so eine Art Freiromfläche erstellen. Leider scheint es in VBA dafür keine Zugriffsmöglichkeit zu geben. Also bleibt mir eigentlich nur die Befehlszeile. Nun meine Frage, kann man, wenn man in AutoCAD mit VBA einen Befehl über die Befehlszeile startet, irgendwie definierte Elemente übergeben. Wenn ich den Befehl gestartet habe, steht in der Befehlszeile "Objekte wählen:" Ich könnte zum Beispiel mit den benötigten Elementen(Splines) ein selection-set definieren. Da ein selectionset ja in einer Zeichnung definiert bleibt bis man es löscht, könnte ich mir gut vorstellen dass sowas geht. Ist es also möglich ein VBA-selectionset manuell über die Befehlszeile abzurufen?
Beispiel: Ich habe per VBA ein selectionset mit einigen Linien definiert. Anschließend gehe ich in AutoCAD auf "Move" und gebe dann irgendwie das sset an. Die Andere Möglichkeit wäre jedes Element einzeln zu übergeben. Geht sowas und wenn ja, wie??? Viele Grüße Ralph Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002
|
erstellt am: 21. Mrz. 2007 19:53 <-- editieren / zitieren --> Unities abgeben: Nur für RalphRX8
Hi Ralph, Hast du es schon einmal mit der Option "_p" für previous versucht?! Ist nicht unbedingt schön aber siehe hier: ThisDrawing.SendCommand "_move" & vbCr & "_p" & vbCr & vbCr & "0,0,0" & vbCr & "@100,0,0" & vbCr Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RalphRX8 Mitglied Kontruktionsbüro
Beiträge: 333 Registriert: 17.11.2004 AutoCAD-Mechanical 2017, SolidEdge ST8
|
erstellt am: 21. Mrz. 2007 20:02 <-- editieren / zitieren --> Unities abgeben:
|
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002
|
erstellt am: 21. Mrz. 2007 20:17 <-- editieren / zitieren --> Unities abgeben: Nur für RalphRX8
|
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 21. Mrz. 2007 20:56 <-- editieren / zitieren --> Unities abgeben: Nur für RalphRX8
Hallo Ralph, mir fehlt's am passenden Lisp. Code:
Dim sset As AcadSelectionSet Dim ent As AcadEntitySet sset = ThisDrawing.SelectionSets("MS") sset.Clear sset.Select acSelectionSetAll For Each ent In sset ' Per Lisp ein Objekt per handle zum Selektionset hinzufügen Debug.Print ent.Handle 'ThisDrawing.SendCommand "lisp'eln" Next ent ' Befehl mit Auswahl aus dem Selectionset SS ThisDrawing.SendCommand "_move !ss " & vbCrLf
Vielleicht hat ja noch jemand den passenden Lisp Ausdruck Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RalphRX8 Mitglied Kontruktionsbüro
Beiträge: 333 Registriert: 17.11.2004
|
erstellt am: 22. Mrz. 2007 21:03 <-- editieren / zitieren --> Unities abgeben:
Danke Stelli1, aber ich bekomme das nicht hin. Ich denke es müsste heißen: Set sset = ThisDrawing.SelectionSets.Add("SS") anstatt Set sset = ThisDrawing.SelectionSets("MS") Oder?? Und dann kann ich doch auch mit VBA Elemente dem SelectionSet hinzufügen, oder? Das passende Lisp finde ich leider nicht. Also ich habe auf jeden Fall die Zeile geändert und die Elemente mit der VBA-Add Methode dem Selectionset hinzugefügt. Wenn ich dann "_move !ss " mache, sagt er ungültige Auswahl. Kannst Du mir vielleicht nochmal auf die Sprünge helfen? Danke vorab. Ralph
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 23. Mrz. 2007 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für RalphRX8
Hallo Ralph, der Code war ja auch nicht fertig. Ich dachte jemand hätte noch eine Idee für die fehlende Zeile. Auf jeden Fall hat das VBA Selektionset nichts mit dem in AutoCAD zu tun. Nachfolgend aber noch eine andere Möglichkeit.
Code: Sub test() ' Zum Testen einige Linien ud einige Kreise zeichnen Dim FilterType(0) As Integer Dim FilterData(0) As Variant Dim sset As AcadSelectionSet Set sset = ThisDrawing.ActiveSelectionSet ' Alle Linien wählen FilterType(0) = 0 FilterData(0) = "LINE" sset.Clear sset.Select acSelectionSetAll, , , FilterType, FilterData ' Auswahl als "Lisp"Selectionset speichern ' Die Auswahl aus sset wird mit _p (vorherige) an Autocad übergeben ThisDrawing.SendCommand ("(setq ssetLine (ssget ""_P""))") & vbCr ' Alle Kreise wählen FilterType(0) = 0 FilterData(0) = "CIRCLE" sset.Clear sset.Select acSelectionSetAll, , , FilterType, FilterData ' Auswahl als "Lisp"Selectionset speichern ThisDrawing.SendCommand ("(setq ssetCircle (ssget ""_P""))") & vbCr ' Alle Linien schieben ThisDrawing.SendCommand "_move !ssetLine " & vbCr & "0,0 2,2" & vbCr ' Alle Kreise schieben ThisDrawing.SendCommand "_move !ssetCircle " & vbCr & "2,2 0,0" & vbCr End Sub
Hierbei wirden in VBA zwei Selektionen (als Beispiel) vorgenommen und in AutoCAD als zwei Selektionen gespeichert. Auf diese hast du dann auch aus AutoCAD einen Zugriff. z.B. "Schieben !ssetCircle" Durch die Eingabe von !ssetCircle als Objektauswahl wird die Auswahl jedem Befehl von AutoCAD zugänglich.Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |