Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Attribute Selektieren

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
  
PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
Autor Thema:  Attribute Selektieren (1909 mal gelesen)
MReiter
Mitglied
Programmierer

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

Beiträge: 1
Registriert: 28.06.2004

erstellt am: 28. Jun. 2004 14:58    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

Wenn ich in einer Zeichnung Blöcke mit Attributen habe, ist es mir möglich von der Blockreferenz (AcadBlockReference) auf die Attribute zuzugreifen. Ich möchte nun aber mittels eines SelectionSet Attribute mit einem bestimmten Namen ändern.
Nun kann ich durch alle Blockreferenzen laufen (DXF Code "INSERT") und dann durch alle Attribute laufen, um das Entsprechende zu finden. Das scheint mir aber von der Performance nicht optimal (große Zeichnung enthällt viele Blockreferenzen). Ich kann aber auch nicht nach "ATTRIB" Selektieren, da kommen keine Entities zurück.
Code Bsp1:
    Dim Entity As AcadEntity
    Dim SelSet As AcadSelectionSet
    Set SelSet = mDoc.SelectionSets.Add("All_Attributes")
    Dim FilterType(0) As Integer
    Dim FilterData(0) As Variant
    FilterType(0) = 0
    FilterData(0) = "ATTRIB" 'Select all AcDbAttributeReference
    'add filter for attribute name here
    SelSet.Select acSelectionSetAll, ,FilterType, FilterData
   
    Dim Attref As AcadAttributeReference

    For Each Entity In SelSet
      Set Attref = Entity
      (...)
    Next
    SelSet.Delete

Gibt es eine Möglichkeit die Selektion nach Blöcken zu verschachteln (Selektiere die Blöcke die ein Attribut mit dem Namen "x" enthalten) oder kann man auf eine andere Weise nach ATTRIB suchen?


------------------
Marc Reiter
REITEC GbR
Eberdingen-Nussdorf

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

RoSiNiNo
Mitglied
Konstrukteur


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

Beiträge: 1126
Registriert: 09.10.2002

Acad 2011-deutsch, Express Tools
3ds Max 2010
Win 7-Professional
HP Workstation Z400, 6GB
GeForce GTX 470

erstellt am: 01. Jul. 2004 08:28    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 MReiter 10 Unities + Antwort hilfreich

Wie wäre es damit:
Code:
    Const TagString As String = "Test"
    Dim objBlk As AcadBlock
    Dim colBlks As AcadBlocks
    Dim objBlkEntity As AcadEntity
    Dim strNamesFilter As String
    Dim objAttribute As AcadAttribute
   
    Dim SS As AcadSelectionSet
    Dim FltTypes(1) As Integer
    Dim FltData(1) As Variant

    Set colBlks = ThisDrawing.Blocks
   
    For Each objBlk In colBlks
        For Each objBlkEntity In objBlk
            If TypeOf objBlkEntity Is AcadAttribute Then
                Set objAttribute = objBlkEntity
                If UCase(objAttribute.TagString) = TagString Then
                  strNamesFilter = strNamesFilter & objBlk.Name & ","
                  Exit For
                End If
            End If
        Next objBlkEntity
    Next objBlk

    Set SS = CreateSelectionSet("SS")

    FltTypes(0) = 0: FltData(0) = "INSERT"
    FltTypes(1) = 2: FltData(1) = strNamesFilter
   
    ' Selectionset erstellen, Benutzer fragen und Filter anwenden
    SS.Clear
    SS.SelectOnScreen FltTypes, FltData



Der Code ist auch recht schnell wenn du sehr viele Blöcke in deiner Zeichnung hast

------------------
Roland

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

Marco Lorenz
Mitglied
Softwareentwickler, freier Inventor & AutoCAD Händler


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

Beiträge: 59
Registriert: 18.09.2001

Win NT,2k,XP Pro
Acad+Mechanical2k-2005,
Inventor 5-9

erstellt am: 18. Jul. 2004 23: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 MReiter 10 Unities + Antwort hilfreich

Ich suche auch schon lange nach einer eleganteren Möglichkeit, gibts aber leider nicht. Die Blöcke einzeln zu durchsuchen, dauert bei großen zeichnungen manchmal schon ätzend lang - aber es hilft nichts, Rolands Weg ist meines Wissens der Einzige

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