明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1260|回复: 13

[提问] 直线和多段线两端画额外的线段

[复制链接]
发表于 2024-10-17 16:16:01 | 显示全部楼层 |阅读模式
求助一下大佬,有什么办法可以如图所示,框选直线或非闭合多段线,之后会自动在两端生成额外的可自定长度的直线

本帖子中包含更多资源

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

x
发表于 2024-10-17 16:29:01 | 显示全部楼层
重画一条啊,那么简单...
回复 支持 0 反对 1

使用道具 举报

发表于 2024-10-17 23:26:44 | 显示全部楼层


  1. (defun c:tt ()
  2.   "tt(两端画线)"
  3.   (defun abc (s1 / p1 p2 r1 r2 l1 l2)
  4.     (setq p1 (vlax-curve-getStartPoint s1)
  5.           p2 (vlax-curve-getEndPoint s1)
  6.     )
  7.     (if (not (equal p1 p2 1e-3))
  8.       (setq r1 (xyp-AngleAtPoint s1 p1)
  9.             r2 (xyp-AngleAtPoint s1 p2)
  10.             l1 (xyp-Line p1 (polar p1 r1 (- dd)))
  11.             l2 (xyp-Line p2 (polar p2 r2 dd))
  12.       )
  13.     )
  14.   )
  15.   (setq dd (Udist 7 "" "线长<输入或鼠标直接量取>" dd nil))
  16.   (setq i -1)
  17.   (if (setq ss (ssget '((0 . "*line,arc"))))
  18.     (while (setq s1 (ssname ss (setq i (1+ i))))
  19.       (abc s1)
  20.     )
  21.   )
  22.   (princ)
  23. )

本帖子中包含更多资源

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

x
回复 支持 0 反对 1

使用道具 举报

发表于 2024-10-17 19:21:42 | 显示全部楼层
  1. (setq ss (ssget '((0 . "LWPOLYLINE,LINE"))))
  2. (setq dis (getint "\n输入长度:"))
  3. (foreach ty (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss)))
  4.         (setq
  5.                 spt (vlax-curve-getStartPoint ty)
  6.                 ept (vlax-curve-getEndPoint ty)
  7.                 an (angle spt ept)
  8.                 pt1 (polar spt an (- dis))
  9.                 pt2 (polar ept an dis)
  10.         )
  11.         (entmake (list '(0 . "LINE") (cons 62 1) (cons 10 spt) (cons 11 pt1)))
  12.         (entmake (list '(0 . "LINE") (cons 62 1) (cons 10 ept) (cons 11 pt2)))
  13. )
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2024-10-17 16:38:33 | 显示全部楼层
你有种再说一遍 发表于 2024-10-17 16:29
重画一条啊,那么简单...

原先的线也要保留啊
发表于 2024-10-17 16:45:46 | 显示全部楼层
624777395 发表于 2024-10-17 16:38
原先的线也要保留啊

再画一条不就保留了吗
发表于 2024-10-17 18:46:29 | 显示全部楼层
都是写代码,方式很多的,先算点,在生成直线
发表于 2024-10-17 19:00:55 | 显示全部楼层
本帖最后由 qazxswk 于 2024-10-17 20:08 编辑

直线和两点的多段线很容易,多点带转角的多段线有点麻烦,怕实现不了。
发表于 2024-10-17 19:51:58 | 显示全部楼层

你的最后画的线,在原来的线外了。楼主要在原来的线内或原来的线上画线
应该把这里改一下
pt1 (polar spt an dis)
pt2 (polar ept an (- dis))
发表于 2024-10-17 20:26:03 | 显示全部楼层
本帖最后由 kozmosovia 于 2024-10-17 20:32 编辑

任意曲线的,拐弯也不怕,端点曲线也相切

  1. (Defun Extend2Ends (crv dis / _Angle ANG EPT SPT)
  2.   (Defun _Angle  (crv)
  3.     (mapcar (function (lambda (x)
  4.       (angle '(0. 0.)
  5.              (vlax-curve-getFirstDeriv
  6.          crv
  7.          x
  8.              )
  9.       )
  10.           )
  11.       )
  12.       (list (vlax-curve-getstartparam crv)
  13.       (vlax-curve-getendparam crv)
  14.       )
  15.     )
  16.   )
  17.   (and (setq spt (vlax-curve-getstartpoint crv))
  18.        (setq ept (vlax-curve-getendpoint crv))
  19.        (not (equal spt ept 0.01))
  20.        (setq ang (_Angle crv))
  21.        (entmakex (list (cons 0 "line")
  22.            (cons 10 spt)
  23.            (cons 11 (polar spt (car ang) (- dis)))
  24.      )
  25.        )
  26.        (entmakex (list (cons 0 "line")
  27.            (cons 10 ept)
  28.            (cons 11 (polar ept (cadr ang) dis))
  29.      )
  30.        )
  31.   )
  32. )
  33. (Defun c:tt () (Extend2Ends (Car (entsel)) 123.45))

本帖子中包含更多资源

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

x

点评

aws
vlax-curve-getFirstDeriv 又了解到一个神器  发表于 2024-10-21 10:24
发表于 2024-10-17 20:48:34 | 显示全部楼层
本帖最后由 qazxswk 于 2024-10-17 20:49 编辑
kozmosovia 发表于 2024-10-17 20:26
任意曲线的,拐弯也不怕,端点曲线也相切

还是你厉害,我跟飞雪神光大神的思路差不多,不过他用的是foreach函数,我想到的是用repeat函数。就是拐弯的多段线,实现不了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-21 03:31 , Processed in 0.170130 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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