找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1204|回复: 7

[每日一码] 动态拉伸LWPOLYLINE

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2021-1-17 10:37:24 | 显示全部楼层 |阅读模式

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

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

×

bjss.gif
  1. (vl-load-com)
  2. (defun c:dyst (/              +-       ang        ang0         dis
  3.                      e              ent      epar        gpt         gpt1
  4.                      grr      i               ind        mpar         n
  5.                      o              olderr   par        pt         pt1
  6.                      pt2      ptn      pto        pton         spar
  7.                      vlapto   ss       tpar        jw-angle-curvept
  8.                      jw-var->list      cmdecho        dynmode         olderr
  9.                      osmode
  10.                     )
  11.   (princ
  12.     "\nDynamic stretch (For LWPOLYLINE,POLYLINE not closed) carrot1983 2008/11/25"
  13.   )
  14.   ;;sub function
  15.   (defun jw-angle-curvept (ename pt / ang object tan)
  16.     (setq object (vlax-ename->vla-object ename))
  17.     (setq tan (vlax-curve-getfirstderiv
  18.                 object
  19.                 (vlax-curve-getparamatpoint object pt)
  20.               )
  21.     )
  22.     (setq
  23.       ang (if (= (car tan) 0)
  24.             (* 0.5 pi)
  25.             (angle (polar pt (atan (/ (cadr tan) (car tan))) 1) pt)
  26.           )
  27.     )
  28.     ang
  29.   )

  30.   (defun jw-var->list (var)
  31.     (if        (= (type var) 'variant)
  32.       (vlax-safearray->list
  33.         (vlax-variant-value
  34.           var
  35.         )
  36.       )
  37.     )
  38.   )

  39.   (if (not olderr)
  40.     (setq olderr *error*)
  41.   )
  42.   (defun *error* (msg /)
  43.     (setq *error* olderr
  44.           olderr  nil
  45.     )
  46.     (if        osmode
  47.       (setvar "osmode" osmode)
  48.     )
  49.     (if        dynmode
  50.       (setvar "dynmode" dynmode)
  51.     )
  52.     (if        cmdecho
  53.       (setvar "cmdecho" cmdecho)
  54.     )
  55.     (princ msg)
  56.     (princ)
  57.   )

  58.   (command "._undo" "begin")
  59.   (setq cmdecho (getvar "cmdecho"))
  60.   (setvar "cmdecho" 0)
  61.   (setq osmode (getvar "osmode"))
  62.   (if (setq dynmode (getvar "dynmode"))
  63.     (setvar "dynmode" 0)
  64.   )
  65.   (setvar "osmode" 695)
  66.   (if (and (setq pt (getpoint "\nSelect the pline not closed: "))
  67.            (setq ss (ssget pt '((0 . "LWPOLYLINE,POLYLINE"))))
  68.            (setq e (ssname ss 0))
  69.            (setq o (vlax-ename->vla-object e))
  70.            (not (vlax-curve-isclosed o))
  71.       )
  72.     (progn

  73.       (setq spar (vlax-curve-getstartparam e))
  74.       (setq epar (vlax-curve-getendparam e))
  75.       (setq tpar (- epar spar))
  76.       (setq ang0 (jw-angle-curvept e pt))
  77.       (setq par (vlax-curve-getparamatpoint e pt))
  78.       (setq ind (fix par))
  79.       (setq mpar (* 0.5 (+ ind ind 1)))

  80.       (while (and (setq grr (grread t 4 0))
  81.                   (or (= (car grr) 2)
  82.                       (= (car grr) 5)
  83.                       (= (car grr) 25)
  84.                   )
  85.              )
  86.         (cond ((< par mpar) ;_param down 0-1-A-mp-2-3
  87.                (setq pt1 (vlax-curve-getpointatparam e ind))
  88.                (setq pt2 (vlax-curve-getpointatparam e (+ ind 1)))
  89.                (setq i 0)
  90.                (setq +- -)
  91.                (setq gpt (cadr grr))
  92.                (setq gpt1 (polar gpt (+ (* 0.5 pi) ang0) (car gpt)))
  93.                (setq pto (inters pt1 pt2 gpt gpt1 nil))
  94.                (setq dis (distance pt1 pto))
  95.                (setq ang (angle pt1 pto))
  96.                (repeat (fix (+ ind 1))
  97.                  (setq n (+- ind i))
  98.                  (setq ptn (jw-var->list (vla-get-coordinate o n)))
  99.                  (setq pton (polar ptn ang dis))
  100.                  (setq vlapto
  101.                         (vlax-make-safearray vlax-vbdouble '(0 . 1))
  102.                  )
  103.                  (vlax-safearray-fill vlapto pton)
  104.                  (vla-put-coordinate o n vlapto)
  105.                  (setq i (1+ i))
  106.                )
  107.               )

  108.               ((>= par mpar) ;_param up 0-1-mp-A-2-3
  109.                (setq pt2 (vlax-curve-getpointatparam e ind))
  110.                (setq pt1 (vlax-curve-getpointatparam e (+ ind 1)))
  111.                (setq i 1)
  112.                (setq +- +)
  113.                (setq gpt (cadr grr))
  114.                (setq gpt1 (polar gpt (+ (* 0.5 pi) ang0) (car gpt)))
  115.                (setq pto (inters pt1 pt2 gpt gpt1 nil))
  116.                (setq dis (distance pt1 pto))
  117.                (setq ang (angle pt1 pto))
  118.                (repeat (fix (- tpar ind))
  119.                  (setq n (+- ind i))
  120.                  (setq ptn (jw-var->list (vla-get-coordinate o n)))
  121.                  (setq pton (polar ptn ang dis))
  122.                  (setq vlapto
  123.                         (vlax-make-safearray vlax-vbdouble '(0 . 1))
  124.                  )
  125.                  (vlax-safearray-fill vlapto pton)
  126.                  (vla-put-coordinate o n vlapto)
  127.                  (setq i (1+ i))
  128.                )
  129.               )
  130.         )
  131.       )
  132.     )
  133.     (princ "\nPlease retry!!!")
  134.   )
  135.   (if dynmode
  136.     (setvar "dynmode" dynmode)
  137.   )
  138.   (setvar "osmode" osmode)
  139.   (setq *error* olderr)
  140.   (setvar "cmdecho" cmdecho)
  141.   (command "._undo" "end")
  142.   (princ)
  143. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

已领礼包: 64个

财富等级: 招财进宝

发表于 2021-1-18 11:14:57 | 显示全部楼层
能不能按长度或者按比例收放

点评

这个是拉伸顶点,不是缩放 你要想缩放,可以去编程申请论坛发个帖子说下需求  详情 回复 发表于 2021-1-18 11:21
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2021-1-18 11:21:17 | 显示全部楼层
chaozi5756 发表于 2021-1-18 11:14
能不能按长度或者按比例收放

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

使用道具 举报

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

使用道具 举报

已领礼包: 282个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 160个

财富等级: 日进斗金

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 01:57 , Processed in 0.391813 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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