明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2867|回复: 11

[讨论] 简化拉伸S命令的想法,请大家伙进来看看!

[复制链接]
发表于 2015-4-14 12:36:42 | 显示全部楼层 |阅读模式
大家好:

            工作中经常会使用拉伸S命令,把多段线或距形拉伸到某个位置,现有个想法就是说能不能以一条构造线或直线为终点,点一下要拉伸的距形的边,再点一下这条构造线或直线,然后就自动拉伸到和构造线和直线重合,怕表达不清楚,附图
谢谢各位!

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-4-14 13:48:27 | 显示全部楼层
加载XLRX_API:
  1. (defun c:tt (/ e1 e2 p1 p2 v a)
  2.   (if (and
  3.         (setq e1 (xlrx-entsel
  4.                    "\n选择拉伸多段线的一条边:"
  5.                    '((0 . "*polyline"))
  6.                  )
  7.         )
  8.         (progn
  9.           (redraw (car e1) 3)
  10.           (setq
  11.             e2 (car (xlrx-entsel "\n选择目标直线边:" '((0 . "*line"))))
  12.           )
  13.         )
  14.       )
  15.     (progn
  16.       (setq p1 (cadr e1)
  17.             e1 (car e1)
  18.             p1 (XLRX-Curve-getClosestPointTo e1 p1)
  19.             p2 (XLRX-Curve-getClosestPointTo e2 p1)
  20.             v  (mapcar '- p2 p1)
  21.             a  (fix (XLRX-Curve-getParamAtPoint e1 p1))
  22.       )
  23.       (XLRX-moveStretchPoint e1 v a (1+ a))

  24.     )
  25.   )
  26.   (princ)
  27. )
 楼主| 发表于 2015-4-14 17:51:15 | 显示全部楼层
Gu_xl 发表于 2015-4-14 13:48
加载XLRX_API:

谢谢GU-XL版主的热心,程序很好用,满足我的需求,能否,提一点小小的修改,如果要是能框选目标线那就完美了
发表于 2015-4-14 20:51:26 | 显示全部楼层
本帖最后由 Gu_xl 于 2015-4-14 20:58 编辑
cj52000 发表于 2015-4-14 17:51
谢谢GU-XL版主的热心,程序很好用,满足我的需求,能否,提一点小小的修改,如果要是能框选目标线那就完美 ...

  1. ;;自定义Stretch命令 By Gu_xl 2015.04.13
  2. (defun c:stt (/            PTINBOX        DRAWBOX            P1          P2        SS    N
  3.               E            SSSET PL        BOX   ENL   I          PTS        L     BASEPT
  4.               BASE  LOOP  GR        TOPT  VEC   IDX          Line
  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 . "*polyline"))))
  32.     (if        ss
  33.       (progn (repeat (setq n (sslength ss))
  34.                (redraw (setq e (ssname ss (setq n (1- n)))) 3)
  35.                (if ssset
  36.                  (ssadd e ssset)
  37.                  (setq ssset (ssadd e))
  38.                )
  39.              )
  40.              (setq pl (list (apply 'mapcar (list 'min p1 p2))
  41.                             (apply 'mapcar (list 'max p1 p2))
  42.                       )
  43.              )
  44.              (setq box (cons pl box))
  45.              (drawbox pl)
  46.       )
  47.     )
  48.   )
  49.   (if ssset
  50.     (progn
  51.       (if (setq        line
  52.                  (car (xlrx-entsel "\选择直线:" '((0 . "line,*polyline")))
  53.                  )
  54.           )
  55.         (progn
  56.           (setq        enl (XLRX-PickSet->List ssset)
  57.                 enl (mapcar
  58.                       '(lambda (x / i pts l)
  59.                          (setq i -1)
  60.                          (setq pts (xlrx-get x "StretchPoints"))
  61.                          (foreach pt pts
  62.                            (setq i (1+ i))
  63.                            (if (ptinbox (trans pt 0 1) box)
  64.                              (setq l (cons i l))
  65.                            )
  66.                          )
  67.                          (cons x (reverse l))
  68.                        )
  69.                       enl
  70.                     )
  71.           )
  72.           (foreach en enl
  73.             (setq e   (car en)
  74.                   idx (cdr en)
  75.                   pts (xlrx-get e "StretchPoints")
  76.                   idx (vl-sort
  77.                         idx
  78.                         '(lambda (a b / p1 p2)
  79.                            (<
  80.                              (distance (setq p1 (nth a pts))
  81.                                        (XLRX-Curve-getClosestPointTo line p1)
  82.                              )
  83.                              (distance (setq p2 (nth b pts))
  84.                                        (XLRX-Curve-getClosestPointTo line p2)
  85.                              )
  86.                            )
  87.                          )
  88.                       )
  89.                   pt  (nth (car idx) pts)
  90.                   pt1 (XLRX-Curve-getClosestPointTo line pt)
  91.                   vec (mapcar '- pt1 pt)
  92.             )
  93.             (apply 'XLRX-moveStretchPoint
  94.                    (cons e (cons vec idx))
  95.             )
  96.           )
  97.         )
  98.       )
  99.     )
  100.   )
  101.   (redraw)
  102.   (princ)
  103. )

点评

对G版的热心和编程能力点32个赞,学习了,谢谢  发表于 2015-4-16 00:05
 楼主| 发表于 2015-4-15 10:28:55 | 显示全部楼层
Gu_xl 发表于 2015-4-14 20:51

谢谢Gu_xl 版的热心!
发表于 2015-4-15 21:59:36 | 显示全部楼层
G版很厉害!
发表于 2015-4-16 11:43:19 | 显示全部楼层
能不能改下:对于多个直线有效?即框选内部直线的按指定点移动,不在框内的直线延伸?
发表于 2015-7-22 14:32:26 | 显示全部楼层
Gu_xl 发表于 2015-4-14 20:51

向G版学习了
发表于 2015-7-23 20:17:05 | 显示全部楼层



向G版学习了
发表于 2015-7-23 20:17:41 | 显示全部楼层
向版主学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-18 22:03 , Processed in 0.227502 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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