| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Selection Sets (4624 mal gelesen)
|
truuck Mitglied Student
 Beiträge: 8 Registriert: 23.02.2005
|
erstellt am: 11. Mai. 2005 09:51 <-- editieren / zitieren --> Unities abgeben:         
I have this problem with using Selection Sets several times for a certain procedure... When you add a Selection Set you have to give it a name, but can you erase that Selection Set (and the name given to it) at the end of the procedure so that when you use the procedure again later you don't get errors saying that the Selection Set already exists. In my case the procedure that contains the use of a Selection Set is used for different objects, so they're not the same objects that have to be mirrored every time I call upon that procedure. Or maybe there's another solution??? Here my code so far: Public Sub MirrorObjects() Dim GpCode(0) As Integer Dim GpData(0) As Variant ' choose objects by layer GpCode(0) = 8 ' select objects on LayerA GpData(0) = "LayerA" Dim Mode As Integer Dim Filtype, FilData As Variant Filtype = GpCode FilData = GpData ' select all objects on LayerA Mode = acSelectionSetAll Dim newSSet As AcadSelectionSet Set newSSet = ACADProject.ThisDrawing.SelectionSets.Add("PSi") newSSet.Select Mode, , , Filtype, FilData Dim ssObject As AcadEntity Dim EntMirror As AcadEntity Dim MirrPoint1 (0 To 2) As Double Dim MirrPoint2 (0 To 2) As Double Dim MirrPoint3 (0 To 2) As Double MirrPoint1 (0) = 0; MirrPoint1 (1) = 0; MirrPoint1 (2) = 0 MirrPoint2 (0) = 100; MirrPoint2 (1) = 0; MirrPoint2 (2) = 0 MirrPoint3 (0) = 100; MirrPoint3 (1) = 0; MirrPoint3 (2) = 100 For Each ssObject In newSSet Set EntMirror = ssObject.Mirror3D _ (MirrPoint1, MirrPoint2, MirrPoint3) Next ssObject newSSet.Erase newSSet.Clear End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
  
 Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 11. Mai. 2005 10:37 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
|
truuck Mitglied Student
 Beiträge: 8 Registriert: 23.02.2005
|
erstellt am: 11. Mai. 2005 13:11 <-- editieren / zitieren --> Unities abgeben:         
|
VBA-Piet Mitglied Bauingenieur

 Beiträge: 15 Registriert: 07.04.2004 AutoCad 2000 Windows XP
|
erstellt am: 11. Mai. 2005 13:44 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
or use this function: Public Function CreateSelectionSet(Optional ssName As String = "SS") Dim objSelSet As AcadSelectionSet For Each objSelSet In ThisDrawing.SelectionSets If objSelSet.name = ssName Then ThisDrawing.SelectionSets.Item(ssName).Delete Exit For End If Next Set objSelSet = tisdrawing.SelectionSets.Add(ssName) Set CreateSelectionSet = objSelSet End Function Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 22. Aug. 2007 13:34 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
Hallo! Ich habe bereits im Forum rumgestöbert, aber finde keine Lösung. Mit folgendem Code-Ausschnitt erzeuge ich ein SelectionSet, dass mir alle Blöcke mit dem Namen "60_40" sucht: Dim blockset As AcadSelectionSet Dim block As AcadBlockReference Dim FType(1) As Integer, FData(1) FType(0) = 0: FData(0) = "INSERT" FType(1) = 2: FData(1) = "60_40" For i = 0 To ThisDrawing.SelectionSets.Count - 1 If ThisDrawing.SelectionSets.Item(i).Name = "BLOCKSET" Then ThisDrawing.SelectionSets.Item(i).Delete End If Next i Set blockset = ThisDrawing.SelectionSets.Add("BLOCKSET") blockset.Select Mode:=acSelectionSetAll, Filtertype:=FType, filterdata:=FData Ich will jetzt diesen Code dahingehend erweitern, dass ich alle Blöcke bekomme die entweder "60_40" oder "60_60" oder... heißen. Wenn ich bei FType und FData folgendes erweitere: FType(2) = 2: FData(2) = "60_60" bekomme ich gar nichts mehr, denn das würde ja bedeuten, dass ich nach Blöcken suche, die beide Eigenschaften aufweisen oder? Habe schon gewisse Ausschnitte mit "<AND..." gesehen, kenn mich damit aber leider nicht aus. Bitte um Hilfe, Lg Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 22. Aug. 2007 15:32 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
|
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 22. Aug. 2007 20:54 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
|
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 22. Aug. 2007 21:03 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
Hat es fast vergessen, es geht auch noch anders (einfacher?)
Code: Dim sset As AcadSelectionSet Dim fType(0 To 2) As Integer Dim fData(0 To 2) As Variant On Error Resume Next Set sset = ThisDrawing.SelectionSets("MySel") If Err.Number Then Set sset = ThisDrawing.SelectionSets.Add("MySel") End If On Error GoTo 0 fType(0) = 0: fData(0) = "Insert" fType(1) = 2: fData(1) = "Kreis,Rechteck" fType(2) = 8: fData(2) = "0,Blöcke" sset.SelectOnScreen fType, fData MsgBox sset.Count
Im Beispiel werden Blöcke mit der Bezeichnung Kreis oder Rechteck und auf den Layern 0 oder Blöcke liegen gesucht.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 |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 23. Aug. 2007 20:22 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
|
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 24. Aug. 2007 12:14 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
Hallo Wielfried, hab deine Lösung probiert, aber sie scheint nicht zu funktionieren: Dim FType(0 To 2) As Integer Dim FData(0 To 2) As Variant FType(0) = 0 FData(0) = "INSERT" FType(1) = 2 For i = LBound(blocknames) To UBound(blocknames) FData(1) = FData(1) & blocknames(i) If i < UBound(blocknames) Then FData(1) = FData(1) & "," End If Next i FType(2) = 8 FData(2) = PIN_LAYER Set blockset = CreateSelectionSet("BLOCKSET") blockset.Select mode:=acSelectionSetAll, FilterType:=FType, FilterData:=FData Die Blöcke sind auf dem Layer PIN_LAYER, aber nicht in der Auswahl meines SelectionSets. Für was ist as "INSERT" notwendig, es geht ja auch ohne, oder? Lg Peter
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: 24. Aug. 2007 14:19 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
Hallo, Zitat: FType(2) = 8 FData(2) = PIN_LAYER
Ist PIN_LAYER eine Variable oder hast du die "" vergessen ? Füg doch mal in der ersten Zeile Option Explict ein. Dann kanst du sehen ob es da Variablen gibt die nicht deklariert sind. 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 |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 24. Aug. 2007 22:04 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
|
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 09. Nov. 2007 09:04 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
Guten Morgen! Ich habe mehrere zusammenhängende Linien und will mich ausgehend vom Ende einer Linie (zB der markierten - siehe Grafik) zur nächsten vortasten. Wenn ich nun den Endpunkt der ersten Linie habe, müsste ich laut meiner Überlegung mit "SelectAtPoint" die aktuelle Linie und die nächste (deren Startpunkt der Endpunkt der vorherigen ist) in die Auswahl bekommen (siehe Grafik), sowie alle andere Objekte die in diesem Punkt ihren Ursprung haben. Wenn ich nun den oberen Punkt der markierten Linie bei "SelectAtPoint" angebe müsste ich also min. 3 Linien im Selectionset haben, aber komischerweise habe ich nur eine Blockreference. Ich blicke da nicht ganz durch und hoffe, dass mir jemand helfen kann. Code:
Public Function getLineAtPoint(line As AcadLine, endpoint As Variant) As AcadLine On Error GoTo ErrorHandler Dim newline As AcadLine Dim lineset As AcadSelectionSet Dim entity As AcadEntity ' CreateSelectionSet funktioniert mit Sicherheit Set lineset = CreateSelectionSet("ENDLINESET") lineset.SelectAtPoint endpoint Debug.Print "POINT: " & endpoint(0) & " " & endpoint(1) Debug.Print "COUNT: " & lineset.count If lineset.count > 0 Then 'Eigentlich Iteration notwendig, aber da sich immer nur ein Objekt in Set befindet vernachlässigt Set entity = lineset.Item(0) Debug.Print "Objectname: " & entity.ObjectName End If lineset.Clear Set getLineAtPoint = Nothing Exit Function ErrorHandler: Debug.Print "***************************************" Debug.Print "Error: " & Error(Err) & Chr(13) & "Function: getLineAtPoint" & Chr(13) & "Description: " & Err.Description & Chr(13) & "Number: " & Err.Number & Chr(13) & "Source: " & Err.Source Debug.Print "***************************************" lineset.Clear Set getLineAtPoint = Nothing Err.Clear On Error GoTo 0 End Function
Ausgabe:POINT: 525,416415665906 474,305950622901 COUNT: 1 Objectname: AcDbBlockReference Kann es evtl. daran liegen, dass ich die Koordinaten zuerst auf 4 Stellen runden muss (weil in der Eigenschaftsanzeige von AutoCad auch nur immer die ersten 4 Kommastellen zu sehen sind)?
Bitte um Hilfe, Liebe Grüße Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 09. Nov. 2007 10:44 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
|
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 11. Nov. 2007 08:45 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
Hallo KlaK, danke für den Hinweis. Ich habe jetzt in der VBA-Hilfe nachgesehen und im Forum, aber ich hab zu PICKBOX nicht brauchbares gefunden. Kannst du mir bitte einen Link bzw. eine kurze "Einführung" geben. Lg Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 12. Nov. 2007 09:13 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
Hallo Peter, aus der AutoCAD-Hilfe: Zitat: PICKBOX Variablentyp: Ganzzahl Gespeichert in: Registrierung Ausgangswert: 3 Bestimmt die Zielhöhe der Objektwahl in Pixeln. Anmerkung Wenn PICKBOX auf 0 gesetzt wurde, ist keine Auswahlvorschau von Objekten verfügbar
aus der AutoCAD-VBA Reference Hilfe: Zitat: SelectAtPoint methodeSignature object.SelectAtPoint Point, FilterType, FilterData Object SelectionSet The object or objects this method applies to. Point Variant (three-element array of doubles); input-only The 3D UCS coordinates specifying the point to use for the selection. FilterType Integer; input-only; optional A DXF group code specifying the type of filter to use. FilterData Variant; input-only; optional The value to filter on. Remarks This method supports the filtering mechanism. The PICKBOX system variable affects object selection. For more selection mode options, see the Select, SelectByPolygon, and SelectOnScreen methods.
Die Größe der PickBox kann auch über Optionen - in Karteikarte Auswahl eingestellt werden. Wenn Pickbox auf 0 steht kann AutoCAD nur den exakt an dieser Stelle befindlichen Punkt fangen (vermute ich mal, aber so tief gehen meine VBA Acad kenntnisse auch nicht). Grüße, Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 12. Nov. 2007 10:29 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
Hallo Klaus, danke für die Antwort! Recht peinlich, hab PICKBOX eingegeben und F1 gedrückt und deshalb beim ersten Versuch nichts gefunden. Ich hab mir das jetzt angesehen und hab die PICKBOX-Variable under "Optionen..." verändert und auf maximale Größe gesetzt, doch es funktioniert trotzdem nicht. Wenn ich die Größe auf 0 setze, wird eine andere Linie ausgewählt, die auch in diesem Punkt ihren Ursprung hat, aber es müssten doch dann beide Linien im Set seit. Hast du sonst noch eine Idee?
Lg Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 12. Nov. 2007 10:40 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
Hallo Peter, evtl. PICKADD auf 1 stellen. Über Befehlszeile oder im Eigenschaftsfenster (rechts neben Auswahl Anzeige + oder 1) nur mal so als Vermutung, ansonsten müßt ich mal Deinen Code übernehmen, dann aber erst abends. Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 12. Nov. 2007 10:41 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
Hi Peter, SelectAtPoint wählt, so wie es aussieht immer nur ein Objekt an dem Punkt aus, ähnlich wie du im Acad beim Objekt picken auch nur ein Objekt wählst. Erstell doch eine SelectionSet über Koordinaten und wähle die benötigten Objekte so aus. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
pistolpete1 Mitglied Student
 
 Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 12. Nov. 2007 10:43 <-- editieren / zitieren --> Unities abgeben:          Nur für truuck
|