Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Auswahlsatz, Filter für selectionsets

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:  Auswahlsatz, Filter für selectionsets (4803 mal gelesen)
otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 08. Okt. 2009 13: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

Hallo zusammen,

ich versuche seit geraumer Zeit einen funktionierenden Filter für einen Auswahlsatz herzustellen.

Filter:
Objekt muss haben
- Layername xy
- im Modellbereich liegen
- entweder
- eine Polylinie
- oder ein Kreis sein

Nehme ich nur die erste Bedingung sind Objekte im Auswahlsatz.
Nehme ich die anderen Bedingungen dazu ist kein Objekt im Auswahlsatz.
Sicher ist: Auf dem gesuchten Layer gibt es im Modellbereich eine geschlossene PL und einen Kreis.

Hier mein letzter Versuch:

Code:

            Dim ssFarbe As AcadSelectionSet
            Dim FilterType(5) As Integer
            Dim FilterData(5) As Variant
   
            Set ssFarbe = ThisDrawing.SelectionSets.Add("ssFarbe1")
            FilterType(0) = 8            'Filter Layer
            FilterData(0) = aktLayer.Name 'Layername als String
            FilterType(1) = 410          'Filter Modell/Layout
            FilterData(1) = 0            '0=Model; 1=Papierber
            FilterType(2) = 0            'Objekttyp als Filter
            FilterData(2) = "<OR"        'Objektname als String
            FilterType(3) = 0            'Objekttyp als Filter
            FilterData(3) = "Polyline"    'Objektname als String
            FilterType(4) = 0            'Objekttyp als Filter
            FilterData(4) = "Circle"      'Objektname als String
            FilterType(5) = 0            'Objekttyp als Filter
            FilterData(5) = "OR>"        'Objektname als String

Noch eine Frage:
Gibt es irgendwo eine List bei der ich die zahlenwerte für AcDbPolylinie etc. nachlesen kann?

------------------
Christian

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 08. Okt. 2009 13:53    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 otm 10 Unities + Antwort hilfreich

der GC 410 hat den Layoutnamen als Wert .. also
FilterData(1) = "MODEL"

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 09. Okt. 2009 09:15    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

@CADmium
Danke, hab ich geändert.

Funktioniert aber trotzdem nicht.
Es werden immer 0 Objekte im Auswahlsatz ausgeworfen.
Hier nochmal der gesamte Code:

Code:
For Each aktLayer In ThisDrawing.Layers
        If UCase(aktLayer.Name) Like Gruppe Then
            'Nur Layer bei denen der filternde Textstring 'Gruppe' im Layernamen vorkommt bearbeiten
            'Auswahlsatz mit allen Objekten bilden, die den Filterkriterien entsprechen und diese zählen
           
            'Löscht nur den einen benötigten Auswahlsatz, falls vorhanden. Fehlerabfang, wenn nicht vorhanden
            On Error Resume Next
            ThisDrawing.SelectionSets.Item("ssFarbe1").Delete
            On Error GoTo 0
           
            'Auswahlsatz definieren
            Dim ssFarbe As AcadSelectionSet
            Dim FilterType(5) As Integer
            Dim FilterData(5) As Variant
   
            Set ssFarbe = ThisDrawing.SelectionSets.Add("ssFarbe1")
           
            'Filter definieren
            FilterType(0) = 8              'Filter Layer
            FilterData(0) = aktLayer.Name  'Layername als String
            FilterType(1) = 410            'Filter ob Modell oder Layout
            FilterData(1) = "Model"        '0=Model; 1=Papierbereich
            FilterType(2) = 0              'Objekttyp als Filter
            FilterData(2) = "<OR"          'Objektname als String
            FilterType(3) = 0              'Objekttyp als Filter
            FilterData(3) = "Polyline"    'Objektname als String
            FilterType(4) = 0              'Objekttyp als Filter
            FilterData(4) = "Circle"      'Objektname als String
            FilterType(5) = 0              'Objekttyp als Filter
            FilterData(5) = "OR>"          'Objektname als String
           
            'Alle Objekte mit dem Filterkriterium in den _
            Auswahlsatz aufnehmen
            ssFarbe.Select acSelectionSetAll, , , FilterType, FilterData
           
            'Prüfen, wieviel Objekte im Auswahlsatz sind
            Dim ObjAnz As Integer
            ObjAnz = ssFarbe.Count
            Debug.Print ObjAnz & " Objekte auf Layer " & aktLayer.Name 'Hier erscheint immer eine 0
           
            If ObjAnz <> 0 Then
                'Wenn Objekte (Polylinien, Kreise) auf dem aktuell bearbeiteten Layer liegen,
                ' dann ...
        End If
    Next

Ziel ist alle geschlossenen Polylinien und Kreise auf einem Layer farbig anzulegen.

Was mache ich bei dem Filter falsch?

------------------
Christian

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: 09. Okt. 2009 10:37    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 otm 10 Unities + Antwort hilfreich

Hallo Christian,

der Filtertype für "<OR" und "<OR" ist -4 nicht 0.

folgender Filter funktioniert bei mir:

Code:

            FilterType(0) = 410            'Filter ob Modell oder Layout
            FilterData(0) = "Model"        '0=Model; 1=Papierbereich
            FilterType(1) = -4            'Objekttyp als Filter
            FilterData(1) = "<OR"          'Objektname als String
            FilterType(2) = 0              'Objekttyp als Filter
            FilterData(2) = "LWPolyline"  'Objektname als String
            FilterType(3) = 0              'Objekttyp als Filter
            FilterData(3) = "Circle"      'Objektname als String
            FilterType(4) = -4            'Objekttyp als Filter
            FilterData(4) = "OR>"          'Objektname als String

lg
Didi

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 09. Okt. 2009 11:56    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

danke Didi ,

bin jetzt einen Schritt weiter.
Noch ne Nachfrage:
Wo kann ich denn eine Übersicht finden über die Filtertype und Filterdata-Begriffe. Z.B. für Polylinie oder für acdbhatch.

------------------
Christian

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: 09. Okt. 2009 14:12    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 otm 10 Unities + Antwort hilfreich

Hallo Christian

das solltest du in der Autocad-Entwicklerhilfe (im Hilfemenü) finden. Ich bin da auch nicht so fit, aber ich denke der Filtertype ist ident mit dem DXF-Gruppencode.
Eventuell ist es auch Hilfreich im Acad mit dem Befehl Liste die Eigenschaften eines Objektes abzufragen, um den Objektnamen zu bekommen.

lg
Didi

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


Ex-Mitglied

erstellt am: 09. Okt. 2009 23:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Christian,

Didi hat schon recht mit den DXFCodes.

Als Zusatz mmöchte ich noch eine Info anhängen: Zum Verifizieren der Eingeschaften eines Elemente (und um zu diesen Eigenschaften des Objekts für den Filter zu kommen) probier mal in der Befehlszeile einzugeben:

(entget (car (entsel)))

Dann wirst Du nach einem Objekt gefragt, klick es an und Du bekommst die Info's in einer Liste von (Code . Wert)
Als Beispiel siehst Du dann

(410 . "Model")

Bedeutet DXFCode 410 und im Wert steht ein String mit dem Inhalt 'Model'.

- alfred -

------------------
www.hollaus.at

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 10. Okt. 2009 08:09    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 otm 10 Unities + Antwort hilfreich

besser noch (entget(car(entsel))'("*"))  .. da gibts -wenn vorhanden- auch noch die Erweiterten Daten .. hinzu ... ist aber LISP 

und mit (entget(car(nentsel))'("*"))  kann man auch verschachtelte Objekte wählen .. z.B. einen Linie durch anklicken dieser in einer Blockref oder einen Vertex bei einer 2D-PL ....

nur mal am Rande ..

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 10. Okt. 2009 18: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

Danke Euch allen,

werd ich am Montag mal probieren.

Schones WE

------------------
Christian

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 12. Okt. 2009 13:17    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

Hat geklappt,

hier nochmal der fertige Filter:

Code:
FilterType(0) = 8              'Filter Layer
            FilterData(0) = aktLayer.Name  'Layername als String
            FilterType(1) = 410            'Filter ob Modell oder Layout
            FilterData(1) = "Model"        '0=Model; 1=Papierbereich
            FilterType(2) = -4            'Objekttyp als Filter
            FilterData(2) = "<OR"          'Objektname als String
            FilterType(3) = 0              'Objekttyp als Filter
            FilterData(3) = "LWPOLYLINE"  'Objektname als String '"LWPolyline","Circle"
            FilterType(4) = 0              'Objekttyp als Filter
            FilterData(4) = "Circle"      'Objektname als String
            FilterType(5) = -4            'Objekttyp als Filter
            FilterData(5) = "OR>"          'Objektname als String

Noch eine weitere Frage:
Die ausgewählten Polylinien und Kreise haben teilweise Solids als Füllung.

Jetz versuche ich diese Solids auszuwählen (und zu löschen).

Mit folgendem Filter bekomme ich sie nicht.

Code:
FType(0) = 8              'Filter Layer
                FData(0) = aktLayer.Name  'Layername als String
                FType(1) = 410            'Filter ob Modell oder Layout
                FData(1) = "Model"        '"Model"; "Layout"
                FType(2) = 0              'Filter Objekt
                FData(2) = "HATCH"        'Objektart als String

Die Solids sind mit dem Objekt noch 'verlinkt'.

Wie muss ich das denn angeben?

------------------
Christian

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


Ex-Mitglied

erstellt am: 12. Okt. 2009 13:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Christian,

erstes kannst Du mal vereinfachen (diese OR-Klammerung machts ja nicht wirklich einfach lesbar), or-Verknüpfungen für eine Filtereigenschaft kannst Du mit Komma getrennt einfach hintereinander schreiben:

Code:
FilterType(0) = 8              'Filter Layer
FilterData(0) = aktLayer.Name  'Layername als String
FilterType(1) = 410            'Filter ob Modell oder Layout
FilterData(1) = "Model"        '0=Model; 1=Papierbereich
FilterType(2) = 0              'Objekttyp als Filter
FilterData(2) = "LWPOLYLINE,CIRCLE"  'Objektname als String '"LWPolyline","Circle"


>> Die Solids sind mit dem Objekt noch 'verlinkt'.

Du meinst, wenn Du ein SelectionSet mit dem Filter mit (0 . "HATCH") erstellst, dass da andere Elemente als Schraffuren enthalten sind ==> glaub ich mal nicht. Wirklich überprüft?

- alfred -

------------------
www.hollaus.at

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 12. Okt. 2009 16:43    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

Hi alfred,

danke für den Vereinfachungstipp.

Meine Vermutung ist, es sind keine Schraffuren im ss.

Ausgangssituation:
ein Layer mit
a einem Kreis
b einer geschlossenen PL
c einer offenen PL
d einer schraffur ohne PL (PL wurde gelöscht)

Folgender Filter

Code:

                FType(0) = 8         
                FData(0) = aktLayer.Name 
                FType(1) = 410           
                FData(1) = "Model"       
                FType(2) = 0             
                FData(2) = "HATCH"       

Ergebnis:
3 Objekte im Auswahlsatz

Wenn ich diese 3 Objekte mit sshatch.erase lösche, werden die Polylinien (auch die offene) gelöscht. Die Solids bleiben.

Problem/Frage:
Kann eine offene Polyline eine Schraffur erhalten?
Wie muss ich die Schraffur ansprechen, ohne die dazugehörige PL anzusprechen?

Ziel soll sein, alle auf einem Layer liegenden Objekte, die Flächen enthalten können (aber nicht müssen), auf Flächenfüllungen zu überprüfen, die Füllungen gegebenenfalls zu löschen und alle Objekte neu mit Flächen anzulegen.

------------------
Christian

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


Ex-Mitglied

erstellt am: 12. Okt. 2009 16:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Christian,

ich hab's jetzt probiert, ich bekomme nur 1 Objekt im SelectionSet lt. Deinem Filter zurück, wenn auf (0 . "HATCH") gefiltert ist, dann kann keine Polylinie zurückkommen. Kann es sein, dass Du vor dem .Select vorher das SelectionSet nicht geleert hast? Mein Test wäre:

Code:
  Dim tSSet As AcadSelectionSet
  Dim tDxfCodes(2) As Integer
  Dim tDxfValues(2) As Variant
  On Error Resume Next
 
  Set tSSet = ThisDrawing.SelectionSets.Add("TEST")
  If (tSSet Is Nothing) Then Set tSSet = ThisDrawing.SelectionSets.Item("TEST")
  tSSet.Clear
 
  tDxfCodes(0) = 410
  tDxfValues(0) = "Model"
  tDxfCodes(1) = 8
  tDxfValues(1) = "0"
  tDxfCodes(2) = 0
  tDxfValues(2) = "HATCH"
 
  tSSet.Select acSelectionSetAll, , , tDxfCodes, tDxfValues

>> alle auf einem Layer liegenden Objekte, die Flächen enthalten können
>> (aber nicht müssen), auf Flächenfüllungen zu überprüfen

Du hast in AutoCAD (ausgenommen beim Objekt MPolygon) kein Objekt, das gefüllt ist (gefüllt im Sinne von Schraffur innerhalb einer Umgrenzung). Du kannst auch für eine Schraffur nicht prüfen, von welchem Objekt diese abhängig ist, denn es kann ja sein, dass es 3 Bögen, eine Spline und 5 Linien gibt, die als Gesamtheit eine Umhüllende für die Schraffur ergeben. Damit wird die Aufgabendefinition von Dir zu überdenken sein.

------------------
www.hollaus.at

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 12. Okt. 2009 17:33    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


2DPolylinie.zip

 
Hi alfred,

hab's mit Deinem Code probiert und kriege eine 1 statt einer 2 bei anhängender Datei.

Ziel ist es alle Schraffuren zu löschen und neu anzulegen.

------------------
Christian

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


Ex-Mitglied

erstellt am: 12. Okt. 2009 19:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,


>> Ziel ist es alle Schraffuren zu löschen

ich bekomme (sorry gleich für Irrtum oben mit .Erase) mit folgendem Code die bestehenden Schraffuren gelöscht. Finde auch 'nur' die Schraffuren, mir werden beim Selektieren nichts anderes als die Schraffuren selektiert.

Code:
  Dim tSSet As AcadSelectionSet
  Dim tDxfCodes(1) As Integer
  Dim tDxfValues(1) As Variant
  On Error Resume Next
 
  Set tSSet = ThisDrawing.SelectionSets.Add("TEST")
  If (tSSet Is Nothing) Then Set tSSet = ThisDrawing.SelectionSets.Item("TEST")
  tSSet.Clear
 
  tDxfCodes(0) = 410
  tDxfValues(0) = "Model"
  tDxfCodes(1) = 0
  tDxfValues(1) = "HATCH"
 
  tSSet.Select acSelectionSetAll, , , tDxfCodes, tDxfValues
 
  Dim i As Integer
  For i = 0 To (tSSet.Count - 1)
      tSSet(i).Delete
  Next


>> Ziel ist es alle Schraffuren neu anzulegen

Ich hab schon oben erwähnt, wie soll herausgefunden werden, was schraffiert war? Du kannst zwar aus den Schraffuren ableiten, aus welchen geometrischen Begrenzungen diese erstellt wurde, aber nicht aus welchen Elementen in der Zeichnung. Selbst wenn Du die Loops der Schraffur auswertest und geometrisch mit bestehender Geometrie vergleichst, wirst Du keine vollständige Trefferquote erreichen (z.B. es könnten ja Linien übereinanderliegen in Deiner Zeichnung) und dazu kommt, dass Vergleich von Geometrieelementen nicht gerade der einfachst Job in der Programmierung ist.

Kannst Du mal beschreiben, wozu Du Schraffuren löscht, die Du danach neu erstellst? Das leuchtet mir nicht ganz ein.

- alfred -

------------------
www.hollaus.at

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 19. Okt. 2009 23:19    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

Hi alfred,

hab hier mal zum besseren Verständnis meine Aufgabenstellung zusammengeschrieben.

Workflow 2D-Längen- und 2D-Flächenermittlung:
1. Benutzereingabe:
  Objekte auf unterschiedlichen Layern erstellen
  (Polylinien, Kreise oder Ellipsen, Linien, Blockreferenzen, ....)
  Es gibt 3 Layerkategorien Längen, Flächen und Texte
  Ein Layer enthält also entweder
    nur Längen (-> Längen ermitteln) oder
    nur Flächen (-> Flächen ermitteln) oder
    nur Texte (-> wird nicht ausgewertet)
    Mischformen sind nicht zulässig
2. Alle geschlossenen Polylinien, Kreise und Ellipsen
    eigentlich alle Objekte, die 2D-Flächen darstellen können und
    die auf Layern, welche Flächen enthalten sollen, liegen
    mit Solids auf dem Layer farbig anlegen
3. Alle diese Flächen mit ihrer Größe auf Textlayer beschriften
    (Hier gibts ein gutes Lisp von Cadwiesel)
    Die Größe muss innerhalb der Fläche stehen (geht leider nicht mit dem Lisp).
    Längen müssen nicht geschrieben werden.
4. Dateiausgabe in Txt-Datei:
  Layername, Layerbezeichnung
  Alle Objektarten eines Layers mit Anzahl ausgeben
  (dient der Fehlererkennung in der Benutzereingabe)
  Alle Flächen und Längen je Layer in Datei ausgeben
  und Flächen und Längen je Layer und Objektart addieren
  (Geht schon)
5. Bei Polylinien auf Längenlayern zusätzlich ausgeben,
    wenn Radien <x Meter vorkommen,
    dazu den Radius und die Bogenlänge auflisten und
    über Bogenlängen mit gleichem Radius die Summe bilden
5. Benutzereingabe: Neue Flächenumfahrungen hinzufügen
    wegen Projekterweiterung/-änderung etc.
6. Alle Solids auf den Flächenlayern löschen und
    alle Flächenbeschriftungen löschen.
7. weiter bei 2. usw.

Wegen Punkt 5. lösche ich die Schraffuren, da ich nicht weiß, welche Polylinien etc. bereits Schraffuren haben und welche nicht.
Es gibt keine Schraffuren, die aus mehreren Objekten entstanden sind.
Falls es sie doch gibt, wäre es eine Fehleingabe und sie müssten gelöscht werden.

Deinen Code oben probiere ich Morgen im Büro aus.

------------------
Christian

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


Ex-Mitglied

erstellt am: 20. Okt. 2009 01:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Christian,

bis auf ein paar Worte in Deiner ausführlichen Beschreibung hätte ich fast dazu geraten, dass Du Dir FDO ansehen solltest.

Du kannst z.B. Deine Geometrie (Flächen- und Linienzuggeometrie) als SDF exportieren, dann über FDO referenzieren (diese Funktionalität ist in Map3D/Civil3D vorhanden) und da bestimmst Du über Stil die Füllungsmethode und die Beschriftung. Sprich es erstellt Dir die Schraffur für die Flächengeometrie selbst, und auch die Beschriftung kann das Ding ohne weitere Probleme.

Wieso meinte ich oben 'fast dazu geraten': Weil Du Ellipsen erwähntest und das sind dann Splines auch nicht weit weg, da beginnt aber dann auch schon die Grenze zu dem, was GIS-Funktionen nicht mehr so gern mögen.

Weiters hast Du geschrieben, dass Du Radien beschriften willst, auch das geht nicht mit Bordmitteln von FDO.

Und wieso hab ich das trotzdem beschrieben: Da ich mir vorstellen könnte, dass Du Dir einen Haufen arbeit ersparst, wenn Du eingebaute Funktionen verwendest.

Also siehe es einfach als Info, dass es da vielleicht in Deinem Civil3D Dinge gibt, die Deine Aufgaben im Bereich Flächen sehr simple und gleichzeitig sehr effektiv lösen könnte, schau's vielleicht an. Solltest Du das alles kennen, dann vergiss diesen Beitrag, aber ev. kann's wer anderer brauchen.

- alfred -

------------------
www.hollaus.at

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 22. Okt. 2009 12:17    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

Hi alfred,

danke für die Hinweise.
Hab mir FDO angeschaut, passt aber nicht in meine Arbeitsumgebung.

Ich werd wohl noch ein paa Beiträge anstoßen um den o.g. Weg zu gehen.

Gruß

------------------
Christian

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