Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  VBA-Selectionset an Acadbefehl übergeben; Wie ??

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:  VBA-Selectionset an Acadbefehl übergeben; Wie ?? (3241 mal gelesen)
Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 01. Okt. 2005 14:21    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 zusammen,

da ich mittels Forumssuche nix finden konnte, wende ich mich mit der Frage an euch:

Wie kann ich ein in VBA erstelltes SelectionSet nach beendigung des Programmes an einen Autocad-Befehl übergeben ?

Im Lisp geht das mittel !SSname nachem man mit (setq SSname (ssget)) diesem ein Selectionset zugeordnet hat.

Aber offensichtlich gibt es hier Unterschiede zwischen einem Autocad bzw. Lisp Selectionset und einem VBA-Selectionset!

Ich würde mich freuen, wenn mir jemand den Unterschied erklären kann, und einen Weg zeigt, wie ich mein Problem löse.

Herzichen Dank schon mal
Didi

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

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 06. Okt. 2005 12:49    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

Keine Antwort ?

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: 07. Okt. 2005 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 Goofy007 10 Unities + Antwort hilfreich

du könntest eventuell diesen Umstand ausnützen, dass ein in VBA erzeugter Auswahlsatz immer der letzte in der Auswahlsatzreihenfolge ist.

z.B.:
    Dim ss As AcadSelectionSet
    Set ss = ThisDrawing.SelectionSets.Add("TEST")
    ss.SelectOnScreen
    ThisDrawing.SendCommand ("(setq ss (ssget ""_P""))" & Chr(13))

hier weise ich der LISP Variable ss einfach den VORIGEN Auswahlsatz zu
den kannst du in autocad dann mit !ss verwenden

oder gleich beim Befehl V für vorige eingeben.

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

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

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: 07. Okt. 2005 12:44    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 Goofy007 10 Unities + Antwort hilfreich

noch eine Antwort in Lisp ausprogrammiert

(vl-load-com)
; Autocad Objekt holen
(setq AxAcad (vlax-get-acad-object))
; aktuelle zeichnung holen
(setq AxDrawing (vla-get-activedocument AxAcad))
; Container Selectionssets holen
(setq AxSelectionsets (vlax-get AxDrawing "SelectionSets"))
; den in VBA erstellten Selectionset mittels dessen Namen holen
(setq AxSelectionset (vlax-invoke AxSelectionsets "ITEM" "TEST3"))

; einen leeren Lisp Auswahlsatz erstellen
(setq LispSelectionset (ssadd) i1 0)
; eine Schleife über alle im Selectionsset enthaltenene Objekte
(repeat (vlax-get AxSelectionset "COUNT")
  ; jedes einzelne Objekt im Auswahlsatz holen
  (setq AxObj (vlax-invoke AxSelectionset "ITEM" i1) i1 (1+ i1))
  ; zu einem Lisp Entity machen und dem Lisp Auswahlsatz hinzufügen
  (setq LispSelectionset(ssadd (vlax-vla-object->ename AxObj) LispSelectionset))
)

jetzt haste einen normalen Lisp Auswahlsatz


EDIT : in dieser Zeile war ein kleiner Fehler drin,
  (setq LispSelectionset(ssadd (vlax-vla-object->ename AxObj) LispSelectionset))

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

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

[Diese Nachricht wurde von fuchsi am 07. Okt. 2005 editiert.]

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

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 07. Okt. 2005 17:20    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 Fuchsi,

danke für die Antwort. Ich habe schon befürchtet gar keine zu bekommen.
Die Idee mit dem sendcommand gefällt mir gut.

mfg didi

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 17. Okt. 2005 21: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 Goofy007 10 Unities + Antwort hilfreich

Hallo Anton,

Zitat:
Original erstellt von fuchsi:
..
(setq ss (ssget "_P"))
..
[/B]

Mit dem obigen Codefragment weisst man den vorherigen Auswahlsatz
einer Variablen zu. Wie geht das mit der aktuellen Auswahl ??

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.

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: 18. Okt. 2005 09:46    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 Goofy007 10 Unities + Antwort hilfreich

Zitat:

Mit dem obigen Codefragment weisst man den vorherigen Auswahlsatz
einer Variablen zu. Wie geht das mit der aktuellen Auswahl ??

Hm, was meinst du mit der aktuellen Auswahl ?
schreib mal was du machen willst.

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

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 18. Okt. 2005 09:54    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 Goofy007 10 Unities + Antwort hilfreich

Hallo Anton,

mit der vorhandenen Funktion wird das Selektionset einer abgeschlossenen Auswahl gespeichert. Da ich einige Selektionen immer wieder machen muss habe ich mit 3 Selektions auf Button gelegt.
Klappt gut.

Was noch schön wäre wenn die Selektion ala PickFirst gespeichert werden könnte. Also Benutzer klickt Elemente an (hat keine Funktion gewählt) und speichert diese Auswahl als Selektion.

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.

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: 18. Okt. 2005 10:03    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 Goofy007 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Stelli1:
Hallo Anton,

mit der vorhandenen Funktion wird das Selektionset einer abgeschlossenen Auswahl gespeichert. Da ich einige Selektionen immer wieder machen muss habe ich mit 3 Selektions auf Button gelegt.
Klappt gut.

Was noch schön wäre wenn die Selektion ala PickFirst gespeichert werden könnte. Also Benutzer klickt Elemente an (hat keine Funktion gewählt) und speichert diese Auswahl als Selektion.

Stelli



nun ja die PickFirst Elemente kriegst du einfach mit
(setq ss (ssget)) als Variable abgespeichert.
Allerdings , hat der User noch nichts ausgewählt, wird er zur Objektwahl aufgefordert.
Wurden bereits Objekte gewählt, werden diese automatisch übernommen (ohne Benutzerauforderung)

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

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

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: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 18. Okt. 2005 10:06    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 Goofy007 10 Unities + Antwort hilfreich

Hallo Anton,

super und Danke

Stelli

------------------
Warum lisp'eln wenn's auch anders geht.

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

Huebi
Mitglied
Vermessungsing.


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

Beiträge: 107
Registriert: 08.01.2004

Intel Core Duo E6750@2.66GHz
NVIDIA GeForce 8600 GT
AutoCAD 2004, 2007, 2008
AcadMAP 2004 und 2007
Civil 3D 2008
ADT 2009

erstellt am: 05. Dez. 2005 11: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 Goofy007 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von fuchsi:

    Dim ss As AcadSelectionSet
    Set ss = ThisDrawing.SelectionSets.Add("TEST")
    ss.SelectOnScreen
    ThisDrawing.SendCommand ("(setq ss (ssget ""_P""))" & Chr(13))

hier weise ich der LISP Variable ss einfach den VORIGEN Auswahlsatz zu
den kannst du in autocad dann mit !ss verwenden

oder gleich beim Befehl V für vorige eingeben.


Hallo fuchsi!

Das funktioniert wohl nur, wenn man das Selectionset mit "SelectOnScreen" oder div. erstellt hat.
Wie macht man es, wenn man das SelectionSet innerhalb von VBA mit der AddItems-Methode generiert hat?

Also folgendes: Ich erzeuge per VBA mehrere Elemente (in diesem Fall Texte) und möchte diese zusammen verschieben (via SendCommand).
Leider funktioniert dann diese Art des Aufrufes nicht :-(

Hat jemand ne bessere Idee?

Gruß - Hübi

------------------
Schaun ma mal, dann seng ma scho.... 

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

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: 30. Mai. 2007 15:44    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 Goofy007 10 Unities + Antwort hilfreich

Man kann beliebige Objekte wie folgt verschieben

Global ssetg

Sub test_move()
Dim ent, Point1(0 To 2) As Double, point2(0 To 2) As Double

Point1(0) = 0: Point1(1) = 0: Point1(2) = 0 'Punkt von
point2(0) = 1: point2(1) = 1: point2(2) = 0 'bis Punkt verschieben
'Objekte selektieren
Call InitSset
For Each ent In ssetg
ssetg.Move Point1, point2
Next ent

End Sub


Sub InitSset()
  On Error Resume Next
      ThisDrawing.SelectionSets.Item("ACAD_Temp").Delete
     
      Set ssetg = Nothing
      Set ssetg = ThisDrawing.SelectionSets.Add("ACAD_Temp")
ssetg.SelectOnScreen
End Sub


'Alle Texte in den Selectionset Texte schreiben
Sub test_selectionset()
Dim sset As AcadSelectionSet, ent
Dim SsetArray() As AcadEntity, a
Call Create_Sset("Texte")
a = -1
For Each ent In ThisDrawing.ModelSpace
If ent.Objectname = "AcDbText" Then
    a = a + 1
    ReDim Preserve SsetArray(0 To a)
    Set SsetArray(a) = ent
End If
Next ent
    ssetg.AddItems SsetArray
End Sub

'Selectionset erzeugen
Sub Create_Sset(SsetName)
  On Error Resume Next
      ThisDrawing.SelectionSets.Item(SsetName).Delete
     
      Set ssetg = Nothing
      Set ssetg = ThisDrawing.SelectionSets.Add(SsetName)
End Sub


Hoffe ich konnte helfen!
Mfg Chris

[Diese Nachricht wurde von c.schojer am 30. Mai. 2007 editiert.]

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