| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: substract befehl; wie die objektauswahl treffen über vba (1957 mal gelesen)
|
Gregi Mitglied
 
 Beiträge: 274 Registriert: 26.03.2004
|
erstellt am: 14. Mai. 2008 16:08 <-- editieren / zitieren --> Unities abgeben:         
Ich habe zunächst über SendCommand einen Zylinder erstellt. Dann über einen weiteren SendComman einen weiteren Volumenkörper. Nun würde ich gerne diese beiden Körper voneinander abziehen, aber die Auswahl funktioniert einfach nicht, was ist hier falsch??? Code: Dim FilterType(0) As Integer Dim FilterData(0) As Variant Dim sset As AcadSelectionSet Set sset = ThisDrawing.ActiveSelectionSet sset.Clear ThisDrawing.SendCommand "bks" & vbCr & "welt" & vbCr ThisDrawing.SendCommand "_cylinder" & vbCr & Komma(clsKilometrierung) & ",0," & Komma(clsOK) & vbCr & Komma(clsRadius) & vbCr & "-" & Komma(clsLaenge) & vbCr FilterType(0) = 0 FilterData(0) = "zylinder" sset.Select acSelectionSetLast, , , FilterType, FilterData Dim plineObj As AcadLWPolyline Dim points(0 To 7) As Double 'Punkt 1 points(0) = clsKilometrierung - clsBreiteKoecher / 2: points(1) = clsBreiteKoecher / 2 'Punkt 2 points(2) = clsKilometrierung + clsBreiteKoecher / 2: points(3) = clsBreiteKoecher / 2 'Punkt 3 points(4) = clsKilometrierung + clsBreiteKoecher / 2: points(5) = -1 * clsBreiteKoecher / 2 'Punkt 4 points(6) = clsKilometrierung - clsBreiteKoecher / 2: points(7) = -1 * clsBreiteKoecher / 2 Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) plineObj.Closed = True ThisDrawing.SendCommand "_extrude" & vbCr & "letztes" & vbCr & vbCr & Komma(-1 * clsTiefeKoecher) & vbCr ThisDrawing.SendCommand "_move" & vbCr & "letztes" & vbCr & vbCr & "0,0,0" & vbCr & "0,0," & Komma(clsOK) & vbCr ThisDrawing.SendCommand "_subtract !ssetzylinder " & vbCr & "letztes" & vbCr
------------------ Grüßle Gregi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten

 Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - ACA 2013 Arcibem System: Windows NT, 2000, XP Internet-Startseite: http://www.archi.de
|
erstellt am: 14. Mai. 2008 16:50 <-- editieren / zitieren --> Unities abgeben:          Nur für Gregi
Hi, erst mal ohne genau auf Dein Programm einzugehen, solltest Du Dir überlegen, nicht ausschliesslich mit sendcommand zu arbeiten. Schau Dir mal die Methoden AddCylinder, AddExtrudedSolid und Boolean an. Ansonsten fällt mir bein Überfliegen auf: FilterData(0) = "zylinder" sollte wohl cylinder heissen? und beim letzten sendcommand übergibst Du !ssetzylinder, sollte wohl sset heissen? Aber ein vba-selectionset im command übergeben geht sowieso nicht. Schau Dir dazu mal DAS an. Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gregi Mitglied
 
 Beiträge: 274 Registriert: 26.03.2004
|
erstellt am: 14. Mai. 2008 17:02 <-- editieren / zitieren --> Unities abgeben:         
Hallo Henning, das mit den AddCylinder usw. habe ich mir überlegt. Hier hat mir nicht gefallen, das diese Objekte in AutoCad dann keine Aussagekräftigen Eigenschaftswerte besitzen, die man dann ev. noch ändern kann. Finde es z.B. verwunderlich, das ein so erzeugter Zylinder dann in den AutoCad Eigenschaften keinen Wert für den Radius besitzt oder für seine Länge. Das mit dem SelectionSet über SendCommand habe ich in einem anderen Beitrag abgeschaut und umgewandelt...aber offensichtlich nicht korrekt. Verstehe diese Übergabe zugegebenermaßen nicht. Gruß Gregor ------------------ Grüßle Gregi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9807 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 14. Mai. 2008 17:04 <-- editieren / zitieren --> Unities abgeben:          Nur für Gregi
Zitat: Original erstellt von wronzky: ...Ansonsten fällt mir beim Überfliegen auf: FilterData(0) = "zylinder" sollte wohl cylinder heissen? ...
Und es müsste für den mit dem Befehl _cylinder erstellten Volumenkörper auf jeden Fall FilterData(0) = "3DSOLID" heißen. Ansonsten kann ich mich Hennings Anmerkungen nur anschließen. ------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de 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: 14. Mai. 2008 19:51 <-- editieren / zitieren --> Unities abgeben:          Nur für Gregi
Hallo Gregor, Zitat: Original erstellt von Gregi: ...Das mit dem SelectionSet über SendCommand habe ich in einem anderen Beitrag abgeschaut und umgewandelt...aber offensichtlich nicht korrekt. Verstehe diese Übergabe zugegebenermaßen nicht. ....
Vielleicht sollte man dann doch eine Rückmeldung schreiben. Klappt (immer wieder gern gelesen)  oder klappt nicht weil .. [mod] Das habe ich bei keinem Thread von dir gefunden. Das gilt natürlich auch für alle anderen Frager. , denn er "Helfer" freut sich neben den U's eigentlich mehr über eine Bestätigung das die Lösung richtig war oder den Fragenden zumindest weiter gebracht hat. [/mod] Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gregi Mitglied
 
 Beiträge: 274 Registriert: 26.03.2004
|
erstellt am: 15. Mai. 2008 07:40 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wilfried, Dein Hinweis ist natürlich gerechtfertigt, aber das Zitat von mir ist genau die von Dir gewünschte Rückmeldung, da habe ich es wohl nur nicht so recht rüber gebracht. Es funktioniert nach wie vor nicht und ich weiß auch nicht, warum es nicht funktioniert und wie ich es lösen kann. Nach einer Nacht drüber schlafen bin ich zu der Ansicht gekommen, das VBA für AutoCad ziemlich bescheiden ist. Ich habe den Eindruck, das ich immer wieder nach Krücken suche, um etwas zu erreichen. Die Variante, das alles mit SendCommand zu machen ist ja alleine schon eine Krücke, da speziell die Volumenkörperfunktionen von VBA ziemlich ärmlich sind wie ich finde. Gebt Ihr mir hier Recht, oder sollte ich mich einfach mehr damit auseinander setzen? Ich muß dazu sagen, das mir alles aus der Online-Hilfe heraussuche, die meines Erachtens auch nicht gerade ausgiebig ist. Vielleicht sollte ich mir doch mal ein Buch zulegen. Gruß Gregor ------------------ Grüßle Gregi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten

 Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - ACA 2013 Arcibem System: Windows NT, 2000, XP Internet-Startseite: http://www.archi.de
|
erstellt am: 15. Mai. 2008 10:50 <-- editieren / zitieren --> Unities abgeben:          Nur für Gregi
Hallo Gregor, erstaunlich... hab' gerade ein Zylinder per sendcommand und einen per addcylinder erzeugt. Tatsächliche ein frapanter Unterschied, wenn man denn die Objekte "bearbeitbar" halten will, insofern verstehe ich jetzt Deine sendcommand-Orgie. Um Deinen Code also ans laufen zu kriegen fasse also nochmal zusammen: - alles mit selectionset weg und an der Stelle von sset.Select... das einsetzen: ThisDrawing.SendCommand ("(setq ssetzylinder (ssget ""_L""))" & Chr(13)). Dann kannst Du die letzte Zeile auch so lassen. Grüsse, Henning
------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gregi Mitglied
 
 Beiträge: 274 Registriert: 26.03.2004
|
erstellt am: 15. Mai. 2008 11:07 <-- editieren / zitieren --> Unities abgeben:         
Puh, gerade im Moment habe ich es geschafft. Habe es folgendermaßen hinbekommen Code: Public Sub ZylinderZeichnen() Dim sset As AcadSelectionSet Dim sset2 As AcadSelectionSet Set sset = ThisDrawing.SelectionSets.Add("Elemente1") Set sset2 = ThisDrawing.SelectionSets.Add("Elemente2") Dim objZylinder As AcadObject Dim objKoecher As AcadObject ThisDrawing.SendCommand "bks" & vbCr & "welt" & vbCr ThisDrawing.SendCommand "_cylinder" & vbCr & Komma(clsKilometrierung) & ",0," & Komma(clsOK) & vbCr & Komma(clsRadius) & vbCr & "-" & Komma(clsLaenge) & vbCr sset.Select acSelectionSetLast Dim Auswahl As AcadObject For Each Auswahl In sset Set objZylinder = Auswahl Next Dim plineObj As AcadLWPolyline Dim points(0 To 7) As Double 'Punkt 1 points(0) = clsKilometrierung - clsBreiteKoecher / 2: points(1) = clsBreiteKoecher / 2 'Punkt 2 points(2) = clsKilometrierung + clsBreiteKoecher / 2: points(3) = clsBreiteKoecher / 2 'Punkt 3 points(4) = clsKilometrierung + clsBreiteKoecher / 2: points(5) = -1 * clsBreiteKoecher / 2 'Punkt 4 points(6) = clsKilometrierung - clsBreiteKoecher / 2: points(7) = -1 * clsBreiteKoecher / 2 Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points) plineObj.Closed = True ThisDrawing.SendCommand "_extrude" & vbCr & "letztes" & vbCr & vbCr & Komma(-1 * clsTiefeKoecher) & vbCr ThisDrawing.SendCommand "_move" & vbCr & "letztes" & vbCr & vbCr & "0,0,0" & vbCr & "0,0," & Komma(clsOK) & vbCr sset2.Select acSelectionSetLast Dim Auswahl2 As AcadObject For Each Auswahl2 In sset2 Set objKoecher = Auswahl2 Next objZylinder.Boolean acSubtraction, objKoecher sset.Delete sset2.Delete Exit Sub
Allerdings beißt sich die Katze hier dann in ihren Schwanz....Denn nach der Boolean Operation verliert der Volumenkörper seine Zylindereigenschaften. Was ja auch veständlich ist, denn es ist ja nun auch kein "reiner" Zylinder mehr. Da hätte ich das in diesem Falle auch gleich ohne SendCommand machen können. Jetzt darf ich mir überlegen, was mir wichtiger ist...die Zylindereigenschaften ohne Köcher oder lieber Köcher und dafür keine Geometrieeigenschaften :-) ------------------ Grüßle Gregi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9807 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 15. Mai. 2008 11:59 <-- editieren / zitieren --> Unities abgeben:          Nur für Gregi
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
   
 Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 15. Mai. 2008 12:26 <-- editieren / zitieren --> Unities abgeben:          Nur für Gregi
|
Gregi Mitglied
 
 Beiträge: 274 Registriert: 26.03.2004
|
erstellt am: 15. Mai. 2008 13:42 <-- editieren / zitieren --> Unities abgeben:         
@Udo: Super, vielen Dank für den Hinweis, jetzt ist der Tag endgültig gerettet! @Anton: Meinst Du mit synchron, das der VBA Code nicht schneller abläuft wie AutoCad die Befehle ausführt? Dieses konnte ich bisher zumindest nicht beobachten, scheint alles schön der Reihe nach abzulaufen. ------------------ Grüßle Gregi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
c.schojer Mitglied
 
 Beiträge: 299 Registriert: 23.05.2007 Autocad 2018
|
erstellt am: 19. Mai. 2008 23:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Gregi
Also das größte Problem mit Sendcommand Befehl ist daß man ständig den Code umändern muß, da sich zb der Befehlsablauf ändern kann.. zb eine Neue Option dazu... Schon geht das Progrämmchen nicht mehr. (zb von Autocad 2007 auf 2008) Mfg Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |