Hallo vlide !
Ich denke Du verwechselt OCS (Objektkoordinaten) mit MCS (Modellkoordinaten).
Die Koordinaten in der Blockdefinition werden als MCS bezeichnet (kannst Du Dir als eine Art Weltkoordinaten innerhalb der Blockdef. vorstellen, jede Blockdef. hat ihr eigenes WCS).
Du musst also die Koordinaten der Pline vom MCS der Blockdef. in WCS umrechnen.
Ganz exakt: OCS-Pline -> MCS-Blockdefinition -> WCS (abhängig von der Lage des INSERTS (BlockREFERENZ)
OCS->MCS ist kein Problem, geht einfach mit:
(trans Punkt (cdr (assoc 210 (entget enamePline)) 0)
... einfache OCS->WCS Transformation, nur daß diese nicht 'echte' Weltkoordinaten zurückgibt, sondern Weltkoordinaten innherhalb der Blockdef. (MCS)
Übrigens: vla-TranslateCoordinates ist eigentlich nichts anderes als trans, nur eben vla-...
MCS->WCS (Koordinaten aus Block 'herausrechnen') ist aber meist nicht ganz einfach. Dafür benötigst Du die Transformationsmatrix des INSERTS. (trans oder vla-TranslateCoordinates funktioniert hierfür nicht !)
Wenn die Matrix bekannt ist, dann lassen sich damit die Punkte leicht aus dem Block herausrechnen.
Die Matrix wird normalerweise von nentselp zurückgegeben. Dafür muß aber der Benutzer die Pline anwählen.
Wenn die Matrix nicht bekannt ist, muss diese berechnet werden. Das ist aber nicht ganz einfach...
Mir ist keine eingebaute LISP-Funktion bekannt, mir der man die Matrix 'zu Fuß' ermitteln kann.
Schau mal unter folgendem Link nach:
http://acad.fleming-group.com/Download/BIXForm/BIXForm.html
Mit diesen Funktionen kannst Du von MCS nach WCS und wieder zurück rechnen.
Ich hoffe, daß Dir das weiterhilft.
Grüße
Andi
[Diese Nachricht wurde von andi2050 am 06. Sep. 2006 editiert.]
[Diese Nachricht wurde von andi2050 am 06. Sep. 2006 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP