找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2853|回复: 16

[教学] 自定义Stretch命令

[复制链接]

已领礼包: 344个

财富等级: 日进斗金

发表于 2014-12-16 17:01:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 牢固 于 2014-12-17 09:46 编辑

版块根据arx帖子 模拟实现STRETCH命令的ARX实现代码用API写了个Lisp版本:
stretch1.gif
  1. ;;自定义Stretch命令 By Gu_xl
  2. (defun c:stt (/  PTINBOX        DRAWBOX      P1     P2    SS   N
  3.     E      SSSET  PL     BOX    ENL     I    PTS   L
  4.     BASEPT BASE   LOOP   GR      TOPT   VEC    IDX
  5.          )
  6.   (defun ptinbox (pt box)
  7.     (vl-some '(lambda (x)
  8.     (and (>= (car pt) (caar x))
  9.          (<= (car pt) (caadr x))
  10.          (>= (cadr pt) (cadar x))
  11.          (<= (cadr pt) (cadadr x))
  12.     )
  13.         )
  14.        box
  15.     )
  16.   )
  17.   (defun drawbox (box / p1 p2 p3 p4)
  18.     (setq p1 (car box)
  19.     p3 (cadr box)
  20.     p2 (list (car p1) (cadr p3))
  21.     p4 (list (car p3) (cadr p1))
  22.     )
  23.     (grdraw p1 p2 1 1)
  24.     (grdraw p2 p3 1 1)
  25.     (grdraw p3 p4 1 1)
  26.     (grdraw p4 p1 1 1)
  27.   )
  28.   (while (and (setq p1 (getpoint "\n第一点:"))
  29.         (setq p2 (getcorner p1 "\n对角点:"))
  30.    )
  31.     ;;(setq ss (ssget "_C" p1 p2 '((0 . "*line"))))
  32.     (setq ss (ssget "_C" p1 p2)) ;;可按需求修改过滤表
  33.     (if  ss
  34.       (progn
  35.   (repeat  (setq n (sslength ss))
  36.     (redraw (setq e (ssname ss (setq n (1- n)))) 3)
  37.     (if ssset
  38.       (ssadd e ssset)
  39.       (setq ssset (ssadd e))
  40.     )
  41.   )
  42.   (setq pl (list (apply 'mapcar (list 'min p1 p2))
  43.            (apply 'mapcar (list 'max p1 p2))
  44.      )
  45.   )
  46.   (setq box (cons pl box))
  47.   (drawbox pl)
  48.       )
  49.     )
  50.   )
  51.   (if ssset
  52.     (progn
  53.       (setq enl (xdrx_Pickset->ents ssset))
  54.       (setq enl
  55.        (mapcar
  56.          '(lambda  (x / i pts l)
  57.       (setq i -1)
  58.       (setq pts (xdrx_getpropertyvalue x "StretchPoint"))
  59.       (foreach pt pts
  60.         (setq i (1+ i))
  61.         (if  (ptinbox (trans pt 0 1) box)
  62.           (setq l (cons i l))
  63.         )
  64.       )
  65.       (cons x (reverse l))
  66.     )
  67.          enl
  68.        )
  69.       )
  70.       (while (not (setq basept (getpoint "\n基点:"))))
  71.       (setq base basept)
  72.       (setq loop t)
  73.       (while loop
  74.   (setq gr (grread t 15))
  75.   (cond ((= 5 (car gr))
  76.          (setq toPt (cadr gr))
  77.          (redraw)        (mapcar '(lambda (x) (drawbox x)) box)
  78.          (grdraw base toPt 3 1)
  79.          (setq vec (mapcar '- topt basept))
  80.          (foreach  en enl
  81.      (setq e   (car en)
  82.            idx (cdr en)
  83.      )
  84.      (apply  'xdrx_entity_MoveStretchPoint
  85.       (cons e (cons vec idx))
  86.      )
  87.          )
  88.          (setq basept toPt)
  89.         )
  90.         ((= 3 (car gr)) (setq loop nil))
  91.   )
  92.       )
  93.     )
  94.   )
  95.   (redraw)
  96.   (princ)
  97. )



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-16 17:40:07 | 显示全部楼层
ET  中有个 Mstretch 也是这个功能

点评

grdraw画的,滚动鼠标会消失,Mstretch的虚框不会,用lisp用什么办法做得象Mstretch一样?  详情 回复 发表于 2014-12-17 08:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-12-17 08:26:05 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2014-12-19 14:46 编辑
st788796 发表于 2014-12-16 17:40
ET  中有个 Mstretch 也是这个功能

grdraw画的,滚动鼠标会消失,Mstretch的虚框不会,用lisp用什么办法做得象Mstretch一样?


G版,我说的是如下函数
(defun C:w1 (/ P PTS X Y)
  (while (setq p (getpoint))
    (setq pts (cons p pts))
    (mapcar '(lambda (x y) (GRDRAW x y 1)) pts (cdr pts))
  )
)
在执行过程中滚动鼠标,虚框仍要消失,怎么办?

点评

要保留虚框,在Loop循环里加一句画框的代码mapcar '(lambda (x) (drawbox x)) box)即可!  详情 回复 发表于 2014-12-17 09:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-17 08:33:21 来自手机 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-12-17 08:26
grdraw画的,滚动鼠标会消失,Mstretch的虚框不会,用lisp用什么办法做得象Mstretch一样?

用xdrx_pointmonitor不停的redraw grdraw
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2014-12-17 09:41:54 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-12-17 08:26
grdraw画的,滚动鼠标会消失,Mstretch的虚框不会,用lisp用什么办法做得象Mstretch一样?

要保留虚框,在Loop循环里加一句画框的代码:(mapcar '(lambda (x) (drawbox x)) box)即可!

点评

应该不是标准答案,loop中总要做事。除非不擦出原来的,但问题是就有许多重叠在一起了。  详情 回复 发表于 2014-12-17 16:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-17 11:24:34 来自手机 | 显示全部楼层
Jig也是要更新显示
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-12-17 16:16:30 | 显示全部楼层
牢固 发表于 2014-12-17 09:41
要保留虚框,在Loop循环里加一句画框的代码mapcar '(lambda (x) (drawbox x)) box)即可!

应该不是标准答案,loop中总要做事。除非不擦出原来的,但问题是就有许多重叠在一起了。

点评

不明白你什么意思?什么就重叠在一起了?你来搞个标准答案吧! 实际效果演示: [attachimg]12169[/attachimg]  详情 回复 发表于 2014-12-17 16:51
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2014-12-17 16:51:14 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-12-17 16:16
应该不是标准答案,loop中总要做事。除非不擦出原来的,但问题是就有许多重叠在一起了。

不明白你什么意思?什么就重叠在一起了?你来搞个标准答案吧!
实际效果演示:
stretch2.gif

点评

G版,你的这个行。我是说用lisp.  详情 回复 发表于 2014-12-18 08:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-12-18 08:30:30 | 显示全部楼层
牢固 发表于 2014-12-17 16:51
不明白你什么意思?什么就重叠在一起了?你来搞个标准答案吧!
实际效果演示:

G版,你的这个行。我是说用lisp.

点评

黄总可以模拟对应XDAPI的函数 也挺有意思  详情 回复 发表于 2014-12-18 11:37
难道我用的不是Lisp?  详情 回复 发表于 2014-12-18 11:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2014-12-18 11:32:16 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-12-18 08:30
G版,你的这个行。我是说用lisp.

难道我用的不是Lisp?{:soso_e114:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1757个

财富等级: 堆金积玉

发表于 2014-12-18 11:37:55 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2014-12-18 08:30
G版,你的这个行。我是说用lisp.

黄总可以模拟对应XDAPI的函数 也挺有意思{:soso_e113:}

点评

是啊,如果老黄能把API再“翻译”成纯LISP,那功力肯定要提高几个数量级了。  详情 回复 发表于 2014-12-18 11:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2014-12-18 11:54:57 | 显示全部楼层
守仁格竹GM 发表于 2014-12-18 11:37
黄总可以模拟对应XDAPI的函数 也挺有意思

是啊,如果老黄能把API再“翻译”成纯LISP,那功力肯定要提高几个数量级了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-18 11:57:54 来自手机 | 显示全部楼层
绝对众神之神了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-1-9 20:43:46 | 显示全部楼层
代码注释不够多,不是很懂
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-1-9 22:36:24 | 显示全部楼层
都是牛人啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-18 10:00 , Processed in 0.516304 second(s), 69 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表