Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Blockelemente bearbeiten - Überarbeitet

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:  Blockelemente bearbeiten - Überarbeitet (660 mal gelesen)
chofmeister
Mitglied
Hochbautechniker


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

Beiträge: 22
Registriert: 14.01.2005

erstellt am: 24. Feb. 2005 09:59    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

Guten Morgen,

habe mein Skript überarbeitet. Sollte eigentlich funktionieren aber irgendein Fehler ist drinn.

Anforderung: Ich möchte die Zeichnung nach allen Blöcken auf dem Layer "Einrichtung-Sanitaer" durchsuchen. Die Namen dieser  Blockreferenzen sollen übertragen werden und jeder Block ind der Blocktabelle dessen Namen mit der Blockreferenz übereinstimmt soll verändert werden.


Code:
Sub chgAllBlockDefs(odoc As AcadDocument)
  On Error GoTo LocalERR

Dim iDummy As Integer
Dim iBCounted As Long
Dim aent As AcadObject
Dim sObjName As String

    Dim ss As AcadSelectionSet                          'Definition der Auswahlsätze
    Dim ssets As AcadSelectionSets
   
    Dim iSMode As Integer                              'Definition des Auswahlmodus
   
    Dim gpcode(2) As Integer                            'Definition des DXF-Filtergruppencodes
    Dim datavalue(2) As Variant                        'Definition des DXF-Filtergruppentyps
 
     
    gpcode(0) = 0                                      'Gruppe: Elementtyp
    datavalue(0) = "Insert"                            'Wert: Block
    gpcode(1) = 8                                      'Gruppe: Layername
    datavalue(1) = "EINRICHTUNG-SANITAER"              'Wert: Layer "Einrichtung-Sanitaer"
    gpcode(2) = 67                                      'Gruppe: Modellbereich/Papierbereich
    datavalue(2) = 0                                    'Wert: Modellbereich
   
   
    Dim groupCode As Variant, dataCode As Variant      'Definieren der Variablen
    groupCode = gpcode
    dataCode = datavalue
   
    Set ssets = ThisDrawing.SelectionSets                      'Erstellen des Auswahlsatzes
    For Each ss In ssets                                'Eventuelle vorhandene Auswahlsätze löschen
        If ss.name = "TMPSET" Then
          ss.Delete
        End If
    Next ss

    Set ss = ThisDrawing.SelectionSets.Add("TMPSET")
    iSMode = acSelectionSetAll                          'Alles Markieren
    ss.Select iSMode, , , groupCode, dataCode          'unter Verwendung von Filtern
   
   
    Debug.Print ss.Count & " Block references in selection set"
    iBCounted = 0
    Dim bref As AcadBlockReference
    For Each aent In ss
    Set bref = aent
    Dim brefname As Variant
    brefname = bref.name
   
    Debug.Print "3333 BLOCKNAME TEST" & brefname
    Dim block As AcadBlock
    Dim blocks As AcadBlocks
    Dim sBlockName As Variant

Bis hierhin funktioniert alles. Die Namen der Blockreferenzen werden korrekt ausgegeben. Jetzt möchte ich diese Namen mit den Blockdefinitionen vergleichen:

sBlockName = block.name
    Set blocks = ThisDrawing.blocks
   
    For Each block In blocks
 
 
  ' * ... all unnamed
  ' *U unnamed user defined, *D dimensions, *X old hatches
  '
  ' change criteria to your likings....
  ' (remove redundancy etc)
 
 
  If block.IsXRef Or block.IsLayout _
      Or (Left(sBlockName, 1) = "*") _
      Or (Left(sBlockName, 2) = "*U") _
      Or (Left(sBlockName, 2) = "*D") _
      Or (Left(sBlockName, 2) = "*X") _
      Then
      iDummy = 0 ' q&d so the THEN is valid...
'      Debug.Print "[" & sBlockName & "] ignored"
  Else
      If block.name brefname Then
      chgBlockDefProps block
      iBCounted = iBCounted + 1
        'Else
        'iDummy = 0
        'End If
   
  End If
Next block
Next aent
  Debug.Print "Blockdefs processed: " & iBCounted
Exit Sub

LocalERR:
  MsgBox "Error in chgAllBlockDefs" & vbCrLf & Err.Description

End Sub

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