st788796 发表于 2014-11-15 09:01:27

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)
)

/db_自贡黄明儒_ 发表于 2014-11-15 13:42:22

这个功能强大

龙吟舞 发表于 2014-11-15 19:14:47

本帖最后由 龙吟舞 于 2014-11-15 19:30 编辑

变形不能用输入数据来控制吗?

newer 发表于 2014-11-15 20:00:23

龙吟舞 发表于 2014-11-15 19:14
变形不能用输入数据来控制吗?

详细说说,怎么个输入数据?

liuyj 发表于 2014-11-15 20:10:37

我猜输入数据大概是这个意思,输入长度数据和宽度数据,以精确控制缩放完的尺寸

newer 发表于 2014-11-15 20:14:41

liuyj 发表于 2014-11-15 20:10
我猜输入数据大概是这个意思,输入长度数据和宽度数据,以精确控制缩放完的尺寸

这不是在演示功能嘛,如果直接知道最后结果,一次就完了,没中间拖动的过程了。

不过,这个拖动,也可以用在可以捕捉控制大小的场合啊,比如像PS里面变换那样。

GFspringwillow 发表于 2016-11-14 22:05:48

你们都太强大了,CAD的数据库是不是都被你们给研究透了,玩的如此出神入化!XDRX_API确实很强大。

newer 发表于 2016-11-14 23:56:16

GFspringwillow 发表于 2016-11-14 22:05


欢迎多参与讨论!!

cpp520hb 发表于 2019-11-3 21:51:30

给力,这个方便,谢谢分享!

shpdzhj 发表于 2020-11-11 20:51:31

这个强大的,找了很久,一定要顶。

drshang 发表于 2023-10-26 22:26:53

666666666666

dyjwyqz5221 发表于 2024-3-21 15:39:24

(xdrx_object_get "block" blk),这句有些问题吧,取不出东西来。
页: [1]
查看完整版本: API应用 选择集动态不等比缩放