Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  substract befehl; wie die objektauswahl treffen über vba

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
  
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



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

Beiträge: 274
Registriert: 26.03.2004

erstellt am: 14. Mai. 2008 16:08    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

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



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

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 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 Gregi 10 Unities + Antwort hilfreich

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



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

Beiträge: 274
Registriert: 26.03.2004

erstellt am: 14. Mai. 2008 17: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

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



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

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 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 Gregi 10 Unities + Antwort hilfreich

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.


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

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 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 Gregi 10 Unities + Antwort hilfreich

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



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

Beiträge: 274
Registriert: 26.03.2004

erstellt am: 15. Mai. 2008 07:40    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 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



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

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 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 Gregi 10 Unities + Antwort hilfreich

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



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

Beiträge: 274
Registriert: 26.03.2004

erstellt am: 15. Mai. 2008 11:07    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

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



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

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 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 Gregi 10 Unities + Antwort hilfreich

Man verliert die Zylinderinformationen nicht. AutoCAD speichert neuerdings eine Historie. Mit STRG+Klick auf das Subelement kann man den Zylinder noch editieren.

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 15. Mai. 2008 12: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 Gregi 10 Unities + Antwort hilfreich

Ist sendcommand überhaupt syncron mit dem VBA-Ablauf ?

------------------

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

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

Gregi
Mitglied



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

Beiträge: 274
Registriert: 26.03.2004

erstellt am: 15. Mai. 2008 13:42    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

@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



Anzeige:Infos zum Werbeplatz >>

ISYBAU Translator 2026 CAD APP für Kostenlose Werkzeuge / Add-Ons, Infrastruktur, Datenaustausch

Das Original auf CADSOMA! Der ISYBAU Translator für Autodesk® Civil 3D® 2026 ist eine unverzichtbare Erweiterung für jeden, der Kanaldaten im ISYBAU (-XML) Format exportieren oder importieren muss. Es besteht ein direkter Zugriff auf die Autodesk® Civil 3D® eigenen Daten.

c.schojer
Mitglied



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

Beiträge: 299
Registriert: 23.05.2007

Autocad 2018

erstellt am: 19. Mai. 2008 23:22    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 Gregi 10 Unities + Antwort hilfreich

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

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)2025 CAD.de | Impressum | Datenschutz