Ein Volumenkörper ist ein Entity. Blöcke bestehen aus Entitys. Die Frage ist wie kopiere ich ein Entity in einen BLOCK
Sub TEST_COPY_ENTITYS_TO_BLOCK()
'test routine keine recursaion etc.
Dim entity As AcadEntity
Dim pfentity As AcadEntity
Dim S As String
Dim SLOPE As New CMD
Dim block As AcadBlock
Dim blockref As AcadBlockReference
Dim ENT As AcadEntity
Dim IDPAIRS
Dim IDPAIR As AcadIdPair
Dim E() As AcadEntity
ReDim E(0)
Dim MS As AcadBlock
Dim M() As Double
Dim i() As Double
On Error Resume Next
For Each entity In ThisDrawing.PickfirstSelectionSet
If entity.objectname <> "AcDbBlockReference" Then
Set E(0) = entity 'its more save and easy to copy them one by one
'copy entitys to the modelspace
Call ThisDrawing.CopyObjects(E, block, IDPAIRS)
'map the IDPAIRS variant to the type structure
Set IDPAIR = IDPAIRS(0)
'Get the new entity by id of the copy
'(in key is the id of the original)
Set ENT = ThisDrawing.ObjectIdToObject(IDPAIR.VALUE)
'apply the current transfomation to the copy
End If
Next
'Wichtig, sonst sieht man nix !
ThisDrawing.REGEN acActiveViewport
APPLICATION.UPDATE
End Sub
Die Sache hat wie so vieles eine "kleinen" Haken - Das oben funktioniert nur für Blöcke die nicht transformiert wurden. Eigentlich müsste man auch sämtliche Verdrehungen, Verschiebungen etc mitberücksichtigen. Was insbesondere bei geschachtelten Blöcken viel Freude bereitet. Habe ich hinter mir, stecken 6 Wochen Arbeit drin, funktioniert. Man benötigt einige .NET APIs um an die Transformationsmatritzen der Blöcke zu gelangen, sowie deren Inversen. Vektorrechnung sollte man Prüfungsreif können. Ferner wissen was eine Rekursion ist und wie man diese programmiert. Bei geschachtelten Blöcken darf man munter während der Rekursion Transformationsmatritzen multiplizieren. Zum Schluss wird dann die Kopie mit der finalen Transformationsmatrix behandelt und das Element ist dann zwar nun im anderen Block an der Zeichnung hat sich optisch dabei nichts geändert.
Für den Zweidimensionalen (flachen) Fall langen Blockeinfügepunkt und Blockrotation. Das ganze für den dreidimensionalen Fall auszuwalzen erspare ich mir hier. Motto: Mir hat damals auch keine Sau geholfen *lacht* Nein, es sprengt von der Codezeilenzahl, der Komplexität, der Mathematik etc. jeglichen Forenrahmen.
Übrigens die IDPAIS sind bei copyobjects sehr hilfreich. Und man findet so gut wie nix darüber...
------------------
Wer es nicht versucht, hat schon verlorn
Und bei 3 Typos gibts den vierten gratis !
<<< not for sale !
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP