| |
 | 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: Selectionset (830 mal gelesen)
|
c.schojer Mitglied
 
 Beiträge: 299 Registriert: 23.05.2007 Autocad 2018
|
erstellt am: 21. Jul. 2008 08:15 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute! Also was mich interessieren würde ist ob ich bei einem Selectionset einfach ein Element entfernen kann? ohne ein Neues Array zu machen und ohne daß ich ich dann bei For each ent in ObjSelectionset next ent <<<-einen Fehler bekomme? Ich weiß ich kanns mit On Error Resume Next auch abfangen aber sauberer wäre es das Element aus dem Selectionset zu entfernen und das sollte recht schnell funktionieren! Mfg Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 21. Jul. 2008 08:19 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
was ist mit der Methode RemoveItems ? Gibts sogar ein Bsp in der hilfe zu. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." 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: 21. Jul. 2008 08:42 <-- editieren / zitieren --> Unities abgeben:         
geht aber nicht Sub ONsset_1() 'Neu programmiert Dim ObjSSet, Status, ent, Anz, Index, a, ARRDEL(), ARRI ARRI = 0 Status = 0 'On Error Resume Next Call getselectionset("Defsset1", ObjSSet, Status) If Status = 0 Then Exit Sub 'Call AllesAus Anz = ObjSSet.count 'On Error Resume Next For a = 0 To ObjSSet.count On Error Resume Next Set ent = ObjSSet(a) If Err = 0 Then Index = Index + 1 If ent.Visible = False Then ent.Visible = True End If Else ARRI = ARRI + 1 ReDim Preserve ARRDEL(1 To ARRI) ARRDEL(ARRI) = a Debug.Print "Fehler im Sset gefunden" End If Err.Clear 'On Error Resume Next Next a On Error GoTo 0 For a = 1 To UBound(ARRDEL) ObjSSet.RemoveItems (VBA.CInt(ARRDEL(a))) Next a Exit Sub End Sub Sub getselectionset(Name, ObjectsSelectionset, Status) Dim ent For Each ent In ThisDrawing.SelectionSets If ent.Name = Name Then Status = 1 Set ObjectsSelectionset = ent Exit For End If 'Debug.Print Ent.Name Next ent End Sub
[Diese Nachricht wurde von c.schojer am 21. Jul. 2008 editiert.] 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: 21. Jul. 2008 12:39 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
Hallo Chris, Zitat: Original erstellt von c.schojer: geht aber nicht
Das geht schon. Dein Fehler ist in der Deklaration. Zitat: Dim ObjSSet, Status, ent, Anz, Index, a, ARRDEL(), ARRI
Das zu entfernende Objekt muss in einem Array sein. Auch wenn es nur eines ist. Bei dir ist es ein Variant und wird zum Objekt. Code: Dim DelEnt(0) as acadentity
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 |
c.schojer Mitglied
 
 Beiträge: 299 Registriert: 23.05.2007 Autocad 2018
|
erstellt am: 21. Jul. 2008 13:04 <-- editieren / zitieren --> Unities abgeben:         
geht leider aber auch nicht Sub OFFsset1() 'Neu programmiert Dim ObjSSet, Status, ent, Anz, Index, a, ARRDEL(), ARRI, DelEnt() As AcadEntity ARRI = 0 Status = 0 'On Error Resume Next Call getselectionset("Defsset1", ObjSSet, Status) If Status = 0 Then Exit Sub 'Call AllesAus Anz = ObjSSet.count 'On Error Resume Next For a = 0 To ObjSSet.count On Error Resume Next Set ent = ObjSSet(a) If Err = 0 Then Index = Index + 1 If ent.Visible = True Then ent.Visible = False 'True End If Else ARRI = ARRI + 1 ReDim Preserve ARRDEL(1 To ARRI) ARRDEL(ARRI) = a Debug.Print "Fehler im Sset gefunden" End If Err.Clear 'On Error Resume Next Next a On Error GoTo 0 ReDim Preserve DelEnt(0 To ARRI - 1) For a = 1 To UBound(ARRDEL) Set DelEnt(a - 1) = ObjSSet(ARRDEL(a)) Next a ObjSSet.RemoveItems DelEnt Exit Sub End Sub
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: 21. Jul. 2008 13:26 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
|
c.schojer Mitglied
 
 Beiträge: 299 Registriert: 23.05.2007 Autocad 2018
|
erstellt am: 21. Jul. 2008 13:40 <-- editieren / zitieren --> Unities abgeben:         
Der selectionset soll korrigiert werden wenn ein Objekt gelöscht wird. und dieser wird im Programm dann noch weiter verwendet. Ich will nur ne Möglichkeit haben aus einem Selectionset einen gelöschten Eintrag zu entfernen. (Und das soll den Rechner nicht in die Knie zwingen sondern schnell gehen) Mfg Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
   
 Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 21. Jul. 2008 15:27 <-- editieren / zitieren --> Unities abgeben:          Nur für c.schojer
|
c.schojer Mitglied
 
 Beiträge: 299 Registriert: 23.05.2007 Autocad 2018
|
erstellt am: 24. Jul. 2008 10:50 <-- editieren / zitieren --> Unities abgeben:         
|