Moin, das geht so nicht
Also du öffnest über VBA Autocad *grinst* Sag mal euren IT Fuzzies, sie sollen mal alle MS Produkte die VBA enthalten deinstallieren... (Was die da treiben ist grober Unfug der VBA Enabler greift auf die selben DLLS zurück) aber egal.
2. Das eingebaute Daten extraction TOOL sollte den Job auch erledigen.
Aber wir wollen ja scripten...
Wir haben ein Autocad dokument und wollen Attribute extrahieren....
1.) alles in Autocad und vba ist ein Block.
dim block as cadblock
dim entity as acadentity
Also mit
for ech block in this drawing
for each entity in block
debug.print entity.objectname
next
next
kommt man an jedes Autocad element ran...
Nur nicht an Blockattribute
Wenn man sich das ganze mal quer durchs Hirn schießen lässt wird klar, das BLOCKREFERENZEN ja nur abbilder von Blöcken sind.
Und weiterhin das wenn solche Abbilder infos enthalten sollen die Kopiespeziefisch sind wohl jede Referenz eine eigene braucht. - DEM IST SO !
Machen es wir mal nicht wissenschaftlich (Blöcke könne Blöcke enthalten etc)
Wir nehmen mal an der Kram lungert nur im Modelspace rum...
'die funktion funzt !!!!!
Function block_get_attribute(blo As AcadBlockReference, tagname, Optional found As Boolean = False) As String
Dim attlist As Variant
On Error Resume Next
If blo.hasattributes Then
attlist = blo.GetAttributes
For i = LBound(attlist) To UBound(attlist)
If UCase(attlist(i).TAGSTRING) = tagname Or UCase(Trim(attlist(i).TAGSTRING)) = tagname & "_001" Then
block_get_attribute = attlist(i).textString
found = True
Exit Function
End If
Next
End If
End Function
sub xyz (BLOCKNAME as STRING, TAGNAME as STRING)'einfach mal ins unreine getippt
dim entity as acadentity
dim BLOCKREF as acadblockreferece
'tagname="Object_der_Begierde"
For ech entity in thisdrawing.modelspace
if lcaseblockref.objectname) = "acdbblockreference" then
SET BLOCKREF=ENTITY
'damit kommen wir an das Abbild ran
if blockref.effectivename=BLOCKNAME then
'für den fall das ein spezieller Block gesucht wird
debug.print block_get_attribute(blockref,tagname)
end if
end if
end sub
So kommt man an soetwas ran
Das hier bracuhen wir nicht:
'No active drawing found. Create a new one.
If acadDoc Is Nothing Then
Set acadDoc = acadApp.Documents.Add
acadApp.Visible = True
End If
insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0#
Set blockObj = acadDoc.Blocks.Item("rohrtabelle")
' Create the attribute definition object in model space
** da wird nichts erzeugt... da wird abgefargt.
Nutzt nur nix, da keien Blockreferenz gesetze wurde
For i = LBound(tAtts) To UBound(tAtts)
If tAtts(i).TagString = "Rohrdurchmesser" Then
tAtts(i).TextString = "21.3"
Exit For
End If
Next
Set blockObj = acadDoc.Blocks.Item("rohrtabelle")
*damit öffnet man einen Blcok zu SCHREIBEN...
Ich hab hier mal einige Module zu dem Thema Blockreferenzen gepostet. Die erschlagen so ziemlich alles (fast) .
Es mag Mühe bereiten die hier zu finden. Nur dürfte das durchaus der Mühe Wert sein :="
Lieben Gruß Thomas
P.S. nu krieg ich wieder ne Abmahnung wegen Spachstiel etc
Egal - hoff es hilft
------------------
Wer es nicht versucht, hat schon verlorn
Und bei 3 Typos gibts den vierten gratis !
<<< for sale !
[Diese Nachricht wurde von rexxitall am 14. Mai. 2017 editiert.]
[Diese Nachricht wurde von rexxitall am 14. Mai. 2017 editiert.]
[Diese Nachricht wurde von rexxitall am 14. Mai. 2017 editiert.]
[Diese Nachricht wurde von rexxitall am 14. Mai. 2017 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP