Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Blockattribute

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:  Blockattribute (1973 mal gelesen)
Kelme
Mitglied



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

Beiträge: 33
Registriert: 16.03.2004

erstellt am: 05. Mai. 2004 16:24    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!

Fügt man einen Block in eine Zeichnung ein, wie kann man anschließend die Attribute dieses Blockes per VBA auslesen oder noch besser verändern?


Danke im voraus !

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

rrrrough
Mitglied



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

Beiträge: 18
Registriert: 15.08.2003

erstellt am: 05. Mai. 2004 20:52    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 Kelme 10 Unities + Antwort hilfreich


NeuerOrdner.zip

 
z.B. so:

im anhang gibt es eine passende zeichnung zum .dvb

Public Sub BlockReferenzBearbeiten()
'WICHTIG: HIER GEHT ES UM BLOCKREFERNZEN NICHT UM DIE BEARBEITUNG DES BLOCKES SELBST
'ERST MAL DEN ENTSPRECHENDEN BLOCK FINDEN - ICH DURCHSUCHE ALLE OBJEKTE - MAN KÖNNTE ABER AUCH DIE DATENBANK MIR SELECTIONSET DURCHSUCHEN
Dim BlockCol As Collection
Dim Objekt As Object
Set BlockCol = New Collection
For Each Objekt In ThisDrawing.ModelSpace
    If TypeName(Objekt) = "IAcadBlockReference" Then
        If Objekt.Name = "NameDesBlocks" Then
            BlockCol.Add Objekt
        End If
    End If
Next
'JETZT LÄSST SICH ÜBER DIE COLLECTION EINE BESTIMMTE BLOCK REFERENZ ANSPRECHEN - ODER WIE IN DIESEM FALL EINFACH ALLE
Dim Stelle As Integer
Dim AktBlock As AcadBlockReference
MsgBox BlockCol.Count
Set AktBlock = BlockCol(1)
AktAtt = AktBlock.GetAttributes
'Hier werden alle verweise auf die Attribute in ein Datenfeld geschrieben
'JETZT KÖNNTE MAN EIN BESTIMMTES ATTRIBUT AUSLESEN
For j = 0 To UBound(AktAtt)
    If AktAtt(j).TagString = "BestimmtesAttribut" Then
        'Auslesen - Tag String ist die Bezeichnung des Attributes
        AktAttInhalt = AktAtt(j).TextString
        'SCHREIBEN - TextString ist der Inhalt des Attibutes
        AktAtt(j).TextString = "NeuerIhnhalt"
    End If
Next
End Sub

ich hoffe es hilft

------------------
leute: vielen dank

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

Kelme
Mitglied



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

Beiträge: 33
Registriert: 16.03.2004

erstellt am: 06. Mai. 2004 09:02    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 zunächst einmal!

Klappt ja alles auch ganz prima in der Zeichnung.
Wenn ich aber eine neue Zeichnung anfange und die deine, oder eine andere, als Block einfüge, liefert diese Zeile:
   AktAtt = AktBlock.GetAttributes
keine Werte mehr.
Kann die Attribute dann also nicht mehr auslesen! Sicher auf Grund der Verschachtelung. Wie komme ich dann an die Attribute heran?

[Diese Nachricht wurde von Kelme am 06. Mai. 2004 editiert.]

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

rrrrough
Mitglied



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

Beiträge: 18
Registriert: 15.08.2003

erstellt am: 06. Mai. 2004 18: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 Nur für Kelme 10 Unities + Antwort hilfreich

du brauchst auf jedenfall einen Verweis auf deine Blockreferenz.
in dem meinem code wird der Verweis so erstell: alle objekte werden angesprochen, wenn sich herausstellt das es sich bei dem objekt um eine blockreferenz handelt [TypeName(Object)], dann wird der Verweis in einer Collection abgelegt. Collection ist eine Sammeltopf für Objektverweise. Man könnte auch ein Array anlegen und dort die Objekt.Handles hineinlegen.
du könntest den verweis auf das objekt natürlich auch so erstellen das das ding auf dem bildschirm gewählt wird - etwa so.

Privat Sub RefWaehlen()
Dim Objekt As AcadHatch
On Error Goto Fehler
ThisDrawing.Utility.GetEntity Objekt,PickedPoint, "Block wählen"
Set AktBlock = Objekt
Exit Sub
Fehler:
If MsgBox("Schraffur konnte nicht gefunden werden. Wiederholen?", vbYesNo) = vbYes Then
Resume
Else: Exit Sub
End Sub
(hab den code jetzt nicht getestet könnten fehler drin sein - aber grundsätzlich könnte es so laufen)
jetzt gibt es wieder einen Verweis auf die Blockreferenz und die Attribute können ausgelesen werden.

------------------
leute: vielen dank

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

Kelme
Mitglied



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

Beiträge: 33
Registriert: 16.03.2004

erstellt am: 12. Mai. 2004 15:52    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

Mmmhhh, geht mal nicht!

Wenn ich dein erstes Codebeispiel dahingehend abwandel:


Public Sub BlockReferenzBearbeiten()
'WICHTIG: HIER GEHT ES UM BLOCKREFERNZEN NICHT UM DIE BEARBEITUNG DES BLOCKES SELBST
'ERST MAL DEN ENTSPRECHENDEN BLOCK FINDEN - ICH DURCHSUCHE ALLE OBJEKTE - MAN KÖNNTE ABER AUCH DIE DATENBANK MIR SELECTIONSET DURCHSUCHEN
Dim BlockCol As Collection
Dim BlockCol2 As Collection
Dim Objekt As Object
Set BlockCol = New Collection
Set BlockCol2 = New Collection
For Each Objekt In ThisDrawing.ModelSpace
    If TypeName(Objekt) = "IAcadBlockReference" Then
        ''If Objekt.Name = "NameDesBlocks" Then
            MsgBox Objekt.Name
            BlockCol.Add Objekt
        ''End If
    End If
Next

'JETZT LÄSST SICH ÜBER DIE COLLECTION EINE BESTIMMTE BLOCK REFERENZ ANSPRECHEN - ODER WIE IN DIESEM FALL EINFACH ALLE
Dim Stelle As Integer
Dim AktBlock As AcadBlockReference
MsgBox BlockCol.Count
For i = 1 To BlockCol.Count
    Set AktBlock = BlockCol(i)
    aktatt = AktBlock.GetAttributes
    'Hier werden alle verweise auf die Attribute in ein Datenfeld geschrieben
    'JETZT KÖNNTE MAN EIN BESTIMMTES ATTRIBUT AUSLESEN
    For j = 0 To UBound(aktatt)
     
        aktattinhalt = aktatt(j).TextString
        aktattname = aktatt(j).TagString
       
        MsgBox aktattname + " " + aktattinhalt
       
    Next
   
Next

End Sub

Wie müßte man denn dann den ersten Teil abändern, das die gleiche Ausgabe wieder erscheint?

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