API应用 选择集动态不等比缩放
本帖最后由 st788796 于 2014-11-15 12:07 编辑(defun c:tt (/ myerr olderr ss bp ss1 blk box vec insblk)
(defun _deleteinsert (ent bn /)
(xdrx_entity_delete ent)
(xdrx_object_delete (xdrx_object_get "block" bn))
)
(defun myerr (msg)
(princ "\n*cancel*")
(xdrx_pointmonitor)
(xdrx_entity_setvisible ss t)
(_deleteinsert insblk blk)
(setq *error* olderr)
(princ)
)
(defun pt->2d (p) (list (car p) (cadr p)))
(defun callback (dynpt / v scl)
(if (not (equal dynpt bp 1e-3))
(progn
(setq v (pt->2d (mapcar '- dynpt bp))
scl (mapcar '/ v vec)
)
(xdrx_setpropertyvalue
insblk
"ScaleFactors"
(list (car scl) (cadr scl) 1.0)
)
)
)
)
(if (setq ss (ssget))
(progn
(setq myerr *error*
*error* myerr
box (xdrx_entity_box ss)
bp (car box)
vec (pt->2d (mapcar '- (caddr box) bp))
ss1 (xdrx_entity_transformedcopy ss (xdrx_matrix_identity))
blk (xdrx_block_make ss1 bp T)
insblk(entlast)
)
(xdrx_entity_setvisible ss nil)
(xdrx_pointmonitor "callback" insblk)
(if (setq p (getcorner bp "\n对角点: "))
(progn
;;getcorner 不能判断用户输入数值,改进只能用getpoint
(xdrx_entity_delete ss)
(command ".explode" insblk);_此处总是将 pline 炸开,在命令行使用不会,不知原因
(xdrx_object_delete (xdrx_object_get "block" blk))
)
(progn
(_deleteinsert insblk blk)
(xdrx_entity_setvisible ss t)
)
)
(xdrx_pointmonitor)
(setq *error* olderr)
)
)
(princ)
) 这个功能强大 本帖最后由 龙吟舞 于 2014-11-15 19:30 编辑
变形不能用输入数据来控制吗?
龙吟舞 发表于 2014-11-15 19:14
变形不能用输入数据来控制吗?
详细说说,怎么个输入数据?
我猜输入数据大概是这个意思,输入长度数据和宽度数据,以精确控制缩放完的尺寸 liuyj 发表于 2014-11-15 20:10
我猜输入数据大概是这个意思,输入长度数据和宽度数据,以精确控制缩放完的尺寸
这不是在演示功能嘛,如果直接知道最后结果,一次就完了,没中间拖动的过程了。
不过,这个拖动,也可以用在可以捕捉控制大小的场合啊,比如像PS里面变换那样。
你们都太强大了,CAD的数据库是不是都被你们给研究透了,玩的如此出神入化!XDRX_API确实很强大。 GFspringwillow 发表于 2016-11-14 22:05
欢迎多参与讨论!!
给力,这个方便,谢谢分享! 这个强大的,找了很久,一定要顶。 666666666666 (xdrx_object_get "block" blk),这句有些问题吧,取不出东西来。
页:
[1]