你这种应用有两个写法,你的写法,因为在回调里面使用的点是WCS的,所以就不涉及到UCS的变换了,直接用MAT2就行了。
 - (defun c:tt1 ()
- (defun mv (p)
- (if (not (equal oldP p 1e-3))
- (progn (setq mat2 (xdrx_matrix_settranslation mat (mapcar '- p oldP))
- oldP p
- )
- (xdrx_entity_transform
- ss
- mat2
- )
- )
- )
- )
- (setq mat (xdrx_matrix_identity 3))
- (setq ss (ssget))
- (setq oldP (trans (getpoint "\n基点:") 1 0)
- lastp (trans (getvar "lastpoint") 1 0)
- )
- (xdrx_drag_jig "mv" "\nselect point:" "" (+ 2 128) 0 oldp)
- )
另外一种写法,用矩阵左乘,用UCS变换,那么你在回调里面处理的点就应该是当前UCS坐标系的点,因为你要把UCS的东西变到WCS,然后在变回来。
改成下面的:
 - (defun c:tt1 ()
- (defun mv (p)
- (if (not (equal oldP (setq p(trans p 0 1)) 1e-3))
- (progn (setq mat2 (xdrx_matrix_settranslation mat (mapcar '- p oldP))
- oldP p
- )
- (xdrx_entity_transform ss (xdrx_matrix_product mat1 mat2 mat3) )
- )
- )
- )
- (setq mat (xdrx_matrix_identity 3))
- (setq ss (ssget))
- (setq oldP (getpoint "\n基点:"))
- (setq mat1 (xdrx_matrix_ucs2wcs)
- mat3 (xdrx_matrix_wcs2ucs)
- )
- (xdrx_drag_jig "mv" "\nselect point:" "" (+ 2 128) 0 oldp)
- )
另外,你用了 xdrx_matrix_aligncoordsystem求WCS到UCS,UCS到WCS的矩阵是可以的,但API直接有WCS到UCS,UCS到WCS的变换矩阵
(xdrx_matrix_ucs2wcs)
(xdrx_matrix_wcs2ucs)
这两个函数里面的具体实现是用你用的aligncoordsystem实现的。
aligncoordsystem更通用,不一定求当前的UCS,任意两个坐标系都可以求。也就是说,你可以在地球上,把太阳上的东西给搬到火星上。不一定得身在“火星“或”太阳上”。
|