- UID
- 1
- 积分
- 15879
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-3
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本次教学讲解如何将一个文本,按照文本包围盒的”中心点“贴到另外一个坐标系的指定点。(从平面文字帖到一个楼房的立面上)
1、得到文本实体的实体坐标系(坐标原点是文本的左下点,X轴是文本的输入方向,Y轴是文本的高度方向)
如图:
[pcode=lisp,true]
(setq coord_from ($xdlsp_entity_GetEcsCoordSystem e1))
;;-->((183.7 355.744 0.0) (0.939228 -0.343294 0.0) (0.343294 0.939228 0.0) (0.0 0.0 1.0))
[/pcode]
因为我们要对齐中心,所以我们把源坐标系的原点修改为文本包围盒的中心点。
[pcode=lisp,true]
(setq box (xdrx_entity_box e1))
;|
box=((183.562 336.023 0.0) (244.246 336.023 0.0) (244.246 376.614 0.0) (183.562 376.614 0.0))
|;
(setq pz (mapcar '+ (car box) (mapcar (lambda(x)(/ x 2.0))(mapcar '- (caddr box)(car box)))))
;|
pz=(213.904 356.319 0.0)
|;
(setq coord_from (cons pz (cdr coord_from))) ;;原点在文本中心的坐标系
;|
coord_from=((213.904 356.319 0.0) (0.939228 -0.343294 0.0) (0.343294 0.939228 0.0) (0.0 0.0 1.0))
|;
[/pcode]
2、求目标坐标系的原点,X轴,Y轴,Z轴
如图:
[pcode=lisp,true]
(setq vx (xdrx_vector_Normalize (mapcar '- px p0)))
;|
vx=(0.9219 0.387428 0.0)
|;
(setq vz (xdrx_vector_negate (xdrx_vector_PerpVector vx)))
;| X轴切向量得到-Z轴,-Z轴向量求反得到VZ
vz=(-0.387428 0.9219 0.0)
|;
(setq vy (xdrx_vector_crossProduct vz vx))
;| Z轴向量叉乘X轴向量得到Y轴
vy=(0.0 0.0 1.0)
|;
(setq pj (getpoint))
;|
pj=(324.434 383.65 20.0)
|;
(setq coord_to (list pj vx vy vz))
;| 目标坐标系
coord_to=((324.434 383.65 20.0) (0.9219 0.387428 0.0) (-0.387428 0.9219 0.0) (0.0 0.0 1.0))
|;
(setq mat (xdrx_matrix_alignCoordSystem coord_from coord_to))
;|
mat=((0.865874 -0.316483 0.387428 251.989) (0.363883 -0.133002 -0.9219 353.204) (0.343294 0.939228 0.0 -388.096) (0.0 0.0 0.0 1.0))
|;
(xdrx_entity_transformedCopy e1 mat)
[/pcode]
测试命令TT
[pcode=lisp,true]
(defun c:tt (/ box coord_from coord_to e1 m_from mat p0 pj px pz vx vy vz x)
(if (and
(setq e1 (car (xdrx_entsel "\n拾取文本<退出>:" '((0 . "text")))))
(setq p0 (getpoint "\nX轴第一点<退出>:"))
(setq px (getpoint "\nX轴第二点<退出>:"))
(setq pj (getpoint "\n拾取插入点<退出>:"))
)
(progn
(setq coord_from ($xdlsp_entity_getecscoordsystem e1))
(setq box (xdrx_entity_box e1))
(setq pz (mapcar
'+
(car box)
(mapcar
'(lambda (x)
(/ x 2.0)
)
(mapcar
'-
(caddr box)
(car box)
)
)
)
)
(setq coord_from (cons pz (cdr coord_from)))
(setq vx (xdrx_vector_normalize (mapcar
'-
px
p0
)
)
)
(setq vz (xdrx_vector_negate (xdrx_vector_perpvector vx)))
(setq vy (xdrx_vector_crossproduct vz vx))
(setq coord_to (list pj vx vy vz))
(setq mat (xdrx_matrix_aligncoordsystem coord_from coord_to))
(xdrx_entity_transformedcopy e1 mat)
(xdrx_entity_setcolor (entlast) 1)
)
)
(princ)
)
[/pcode]
|
评分
-
查看全部评分
|