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...
|