找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 790|回复: 11

[每日一码] 动态拉伸多段线的边

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

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

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

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

×
0002.gif

  1. (defun c:ofss (/ E G O P1 P2 V1 V2 V3)
  2.               ;|
  3. *************************************************************************************************
  4. *
  5. *        by ElpanovEvgeniy 26.02.2010
  6. *
  7. *        ----------------
  8. *        27.02.2010 8:30
  9. *        fix bug for acad 2004 (vlax-curve-getFirstDeriv e (vlax-curve-getEndParam e))
  10. *        ----------------
  11. *        27.02.2010 8:55
  12. *        fix bug for first arc segment
  13. *************************************************************************************************

  14. |;
  15. (setq e  (entsel)
  16.        p1 (cadr e)
  17.        e  (car e)
  18.        p1 (fix (vlax-curve-getParamAtPoint e (vlax-curve-getClosestPointTo e p1)))
  19.        o  (vlax-ename->vla-object e)
  20. ) ;_  setq
  21. (if (= 1 (cdr (assoc 70 (entget e))))
  22.   (cond ((zerop p1)
  23.          (setq p2 (1+ p1)
  24.                v1 (list (vlax-curve-getPointAtParam e (vlax-curve-getEndParam e))
  25.                         (vlax-curve-getFirstDeriv e (1- (vlax-curve-getEndParam e)))
  26.                   ) ;_  list
  27.                v2 (list (vlax-curve-getPointAtParam e p1) (vlax-curve-getFirstDeriv e 0.5))
  28.                v3 (list (vlax-curve-getPointAtParam e p2) (vlax-curve-getFirstDeriv e 1.5))
  29.          ) ;_  setq
  30.         )
  31.         ((= p1 (1- (vlax-curve-getEndParam e)))
  32.          (setq p2 0
  33.                v1 (list (vlax-curve-getPointAtParam e (1- p1))
  34.                         (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
  35.                   ) ;_  list
  36.                v2 (list (vlax-curve-getPointAtParam e p1) (vlax-curve-getFirstDeriv e (+ p1 0.5)))
  37.                v3 (list (vlax-curve-getPointAtParam e p2) (vlax-curve-getFirstDeriv e (+ p2 0.5)))
  38.          ) ;_  setq
  39.         )
  40.         ((setq p2 (1+ p1)
  41.                v1 (list (vlax-curve-getPointAtParam e (1- p1))
  42.                         (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
  43.                   ) ;_  list
  44.                v2 (list (vlax-curve-getPointAtParam e p1) (vlax-curve-getFirstDeriv e (+ p1 0.5)))
  45.                v3 (list (vlax-curve-getPointAtParam e p2) (vlax-curve-getFirstDeriv e (+ p2 0.5)))
  46.          ) ;_  setq
  47.         )
  48.   ) ;_  cond
  49.   (cond ((zerop p1)
  50.          (setq p2 (1+ p1)
  51.                v2 (list (vlax-curve-getPointAtParam e 0) (vlax-curve-getFirstDeriv e 0.5))
  52.                v1 (list (car v2) (list (cadadr v2) (- (caadr v2)) 0.))
  53.                v3 (list (vlax-curve-getPointAtParam e p2) (vlax-curve-getFirstDeriv e 1.5))
  54.          ) ;_  setq
  55.         )
  56.         ((= p1 (1- (vlax-curve-getEndParam e)))
  57.          (setq p2 (vlax-curve-getEndParam e)
  58.                v1 (list (vlax-curve-getPointAtParam e (1- p1))
  59.                         (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
  60.                   ) ;_  list
  61.                v2 (list (vlax-curve-getPointAtParam e p1) (vlax-curve-getFirstDeriv e (+ p1 0.5)))
  62.                v3 (list (vlax-curve-getPointAtParam e p2) (list (cadadr v2) (- (caadr v2)) 0.))
  63.          ) ;_  setq
  64.         )
  65.         ((setq p2 (1+ p1)
  66.                v1 (list (vlax-curve-getPointAtParam e (1- p1))
  67.                         (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
  68.                   ) ;_  list
  69.                v3 (list (vlax-curve-getPointAtParam e p2) (vlax-curve-getFirstDeriv e (+ p2 0.5)))
  70.                v2 (list (vlax-curve-getPointAtParam e p1) (vlax-curve-getFirstDeriv e (+ p1 0.5)))
  71.          ) ;_  setq
  72.         )
  73.   ) ;_  cond
  74. ) ;_  if
  75. (while (= (car (setq g (grread nil 5 0))) 5)
  76.   (vla-put-coordinate
  77.    o
  78.    p1
  79.    (vlax-make-variant
  80.     (vlax-safearray-fill (vlax-make-safearray 5 '(0 . 1))
  81.                          (reverse (cdr (reverse (inters (car v1)
  82.                                                         (mapcar '+ (car v1) (cadr v1))
  83.                                                         (cadr g)
  84.                                                         (mapcar '+ (cadr g) (cadr v2))
  85.                                                         nil
  86.                                                 ) ;_  inters
  87.                                        ) ;_  reverse
  88.                                   ) ;_  cdr
  89.                          ) ;_  reverse
  90.     ) ;_  vlax-safearray-fill
  91.    ) ;_  vlax-make-variant
  92.   ) ;_  vla-put-coordinate
  93.   (vla-put-coordinate
  94.    o
  95.    p2
  96.    (vlax-make-variant
  97.     (vlax-safearray-fill (vlax-make-safearray 5 '(0 . 1))
  98.                          (reverse (cdr (reverse (inters (car v3)
  99.                                                         (mapcar '+ (car v3) (cadr v3))
  100.                                                         (cadr g)
  101.                                                         (mapcar '+ (cadr g) (cadr v2))
  102.                                                         nil
  103.                                                 ) ;_  inters
  104.                                        ) ;_  reverse
  105.                                   ) ;_  cdr
  106.                          ) ;_  reverse
  107.     ) ;_  vlax-safearray-fill
  108.    ) ;_  vlax-make-variant
  109.   ) ;_  vla-put-coordinate
  110. ) ;_  while
  111. (princ)
  112. )


另外一个实现:
动态多边形某边移.gif
游客,本帖隐藏的内容需要积分高于 30 才可浏览,您当前积分为 0
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6881个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 375个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 25个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 756个

财富等级: 财运亨通

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 13:56 , Processed in 0.206671 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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