| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Koordinaten global und lokal (1518 mal gelesen)
|
Boortsneggor Mitglied Ingenieur
Beiträge: 49 Registriert: 27.12.2011 Win7 Prof, Visual Studio 2010/2012, ObjectARX 2008/2012/2013, ACAD 2008/2012/2013
|
erstellt am: 16. Feb. 2013 11:35 <-- editieren / zitieren --> Unities abgeben:
Einen schönen guten Tag, ich habe gerade ein kleines Koordinaten-Problem. Ich habe eine Zeichnung, welche BlockDefinitionen mit DBText-Objecten enthält. Ich möchte diese Text-Objekte durch Text-Attribute von einer BlockReferenz ersetzen. Das funktioniert im Grunde auch sehr gut. Die Positionen der Text-Objekte innerhalb der BlockDefinitionen scheinen sich auf das blockinterne Koordinatensystem zu beziehen. Im Ergebnis liegen die Text-Attribute nach der Ersetzung immer in der Nähe des Nullpunktes der Zeichnung. Ich kenne die Eigenschaft "BlockTransform", jedoch habe ich noch nicht so richtig verstanden, wie die Transformierung der Koordinaten genau zusammenhängt. Ich möchte quasi die Koordinaten aus der "Blockwelt" in die "Zeichnungswelt" überführen. Es wäre schön, wenn mir dieses Thema mal jemand näher erläutern könnte. Vielen Dank im Voraus und ein schönes WE! Grüße Robert ------------------ Robert Menger Gabo Engineering GmbH Entwicklung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 18. Feb. 2013 07:00 <-- editieren / zitieren --> Unities abgeben: Nur für Boortsneggor
Hallo Robert, die Transformation beinhaltet alle Informationen hinsichtlich: -Verschiebung -Drehung -Skalierung im Verhältnis des Koordinatensystems der Blockdefinition und des Weltkoordinatensystems, in das die Blockreferenz eingefügt ist. Die Elemente einer Blockdefinition sind alle in Bezug auf den Koordinateursprung der Blockdefinition mit der Drehung 0 und der Skalierung X|Y|Z 1|1|1 gespeichert. Die Eigenschaft Blockreference.BlockTransform beinhaltet die Transformationsmatrix, wie man die Koordinaten der Blockdefinition hin zur jeweiligen Blockreferenz transformieren muss. Da ein Text fester Bestandteil der Blockdefinition ist, müssen, wenn du die Koordinaten für die Attributreferenz ermitteln willst, die Text-Koordinaten in das Welt-Koordinatensystem transformiert werden. Die Koordinaten der Attributreferenzen sind nicht in Bezug auf die Blockreferenz gespeichert, sondern im WKS. Grüße! Holger ------------------ Holger Brischke FREIE SCHULUNGSPLÄTZE -- C#.NET-Schulung im Mai 2013 Bei Interesse bitte melden! CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Boortsneggor Mitglied Ingenieur
Beiträge: 49 Registriert: 27.12.2011 Win7 Prof, Visual Studio 2010/2012, ObjectARX 2008/2012/2013, ACAD 2008/2012/2013
|
erstellt am: 19. Feb. 2013 08:29 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Holger, vielen Dank für deine Erklärung. Leider hängt es bei mir immer noch an der Umsetzung. Ich muss mir also eine Transformationsmatrix erstellen, die mir die Position des Textes im Bezug auf das Block-Koordinatensystem in das WKS überführt. Bisheriger Code-Schnipsel dafür: Code:
//Transformationsmatrix erstellen, aber mit welchem Vektor??? Matrix3d transWCS = Matrix3d.WorldToPlane(txtBlockDef.Normal); //Text-Position transformieren attributeRef.Position = txtBlockDef.TransformBy(transWCS);
Welchen Vektor muss ich denn für die Transformationsmatrix hernehmen? In den Beispielen von Autodesk wurde immer der Normalen-Vektor des jeweiligen Objektes genommen, jedoch funktioniert das in meinem Fall nicht. Vielen Dank für deine Hilfe! Grüße Robert ------------------ Robert Menger Gabo Engineering GmbH Entwicklung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 19. Feb. 2013 08:35 <-- editieren / zitieren --> Unities abgeben: Nur für Boortsneggor
BlockReference. BlockTransform... beinhaltet doch die Transformation der Blockdefinition auf die BlockReference - wo ist das Problem? Grüße! Holger ------------------ Holger Brischke FREIE SCHULUNGSPLÄTZE -- C#.NET-Schulung im Mai 2013 Bei Interesse bitte melden! CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Boortsneggor Mitglied Ingenieur
Beiträge: 49 Registriert: 27.12.2011 Win7 Prof, Visual Studio 2010/2012, ObjectARX 2008/2012/2013, ACAD 2008/2012/2013
|
erstellt am: 20. Feb. 2013 20:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, mein Problem war, dass ich die Transformation allein an Hand der BlockTableRecord machen wollte. Doch das geht wohl nicht. Ich habe mir nun mit Hilfe der GetBlockRefIds-Methode die jeweilige BlockReference geholt und damit die Transformation durchgeführt. So klappts Vielen Dank für deine Hilfe! Grüße Robert ------------------ Robert Menger Gabo Engineering GmbH Entwicklung Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |