![]() |
|
Bitte drücken Sie nicht mehrfach auf "Antwort speichern".
*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.
Beiträge: 74 / 0 AutoCad 2022 64Bit Ich steh auf dem Schlauch! Aus einem vorhanden Block lese ich die Attribute aus. Durch Auswahl soll der Nutzer einen Volumenkörper in der Zeichnung auswählen. Dim VKoeper As AcadObject ThisDrawing.Utility.prompt Chr(13) '*********************** 'Hier ist das Problem, wie füge ich ein Volumenkörper in einen Block ein? Sarotti ------------------ Beiträge: 258 / 0 Various: systems, Operating systems, cad systems, cad versions, programming languages. Dim ENT As AcadEntity 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... ------------------ Beiträge: 74 / 0 AutoCad 2022 64Bit vielen Dank für deine ausführliche Antwort. Das ist dann doch etwas viel Aufwand um den Anwender die Auswahl zu erleichtern. Ich gehör damit zu den Verlierern :-) Ich hab das Problem in der Zwischenzeit umgangen/abgekürzt in dem der Anwender erst mit AutoCAD-Befehlen einen Block erstellen muss und anschließend werden die Attribute von einem Block auf den anderen übertragen. Gruß Sarotti ------------------ Beiträge: 258 / 0 Various: systems, Operating systems, cad systems, cad versions, programming languages. ------------------sarotti
Windows 10-64Bit mit 32 GByteHallo liebe Leute im Forum,
Dieser Volumenkörper soll in einen Block eingefügt werden, und dem neuen Block werden dann die Attribute aus dem Ursprungsblock hinzugefügt.
Ich bekomm den Volumenkörper nicht in den Block eingefügt, was mach ich falsch?
ThisDrawing.Utility.GetEntity GewObjekt, PickedPoint, "Volumenkörper auswählen:" & prompt
'Überprüfen ob ein gültiges Objekt ausgewählt wurde
If GewObjekt.ObjectName <> "AcDb3dSolid" Then
'Fehlermeldung
MsgBox "Kein Volumenelement ausgewählt!", vbCritical, "Fehlermeldung"
Exit Sub
Else
'************************
'Block erstellen mit Name
Set blockObj = ThisDrawing.Blocks.Add(BlockEinfügepkt, Blockname)
'Volumenelement einfügen
Set VKoeper = blockObj.Add??????(GewObjekt)
'Block in Zeichnung einfügen
BlockEinfügepkt(0) = 0
BlockEinfügepkt(1) = 0
BlockEinfügepkt(2) = 0
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(BlockEinfügepkt, Blockname, 1, 1, 1, 0)
End If
Danke für die Hilfe im voraus.
AutoCad 2016 64Bit
Windows 8-64Bit mit 8 GByte
Windows 7-64Bit mit 8 GByterexxitall 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 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
Wer es nicht versucht, hat schon verlorn
Und bei 3 Typos gibts den vierten gratis !
<<< not for sale !sarotti
Windows 10-64Bit mit 32 GByteHallo rexxitall,
AutoCad 2022 64Bit
Windows 10-64Bit mit 32 GByterexxitall Es ist nicht blöde wenn es funktioniert
Deutlich schneller dürfte es noch dazu sein
L.G. Thomas
Wer es nicht versucht, hat schon verlorn
Und bei 3 Typos gibts den vierten gratis !
<<< not for sale !