明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: daiguafan

求助个思路,就是直线没相交就延伸到那个位置,如果相交就剪切掉

  [复制链接]
发表于 2012-3-20 11:56 | 显示全部楼层
发表于 2012-3-20 13:26 | 显示全部楼层

,,

本帖最后由 xiaxiang 于 2012-3-20 13:32 编辑

如下代码须全部一起选中,边界必须是复线
  1. (defun c:mextend (/ ang c e lines lwp lyr ptlst pts ss)
  2.   (if (setq ss (ssget ":L" '((0 . "LWPOLYLINE,LINE,SPLINE,CIRCLE"))))
  3.     (progn
  4.       (mapcar '(lambda (e)
  5. (if (wcmatch (cdr (assoc 0 (entget e))) "LINE")
  6.    (setq lines (cons e lines))
  7.    (setq lwp (cons e lwp))
  8. )
  9.        )
  10.       (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  11.       )
  12.       (if (and lwp lines)
  13. (foreach l (mapcar 'vlax-ename->vla-object lines)
  14.   (setq
  15. ang   (vla-get-angle l)
  16. lyr   (vla-get-layer l)
  17. ptlst nil
  18.   )
  19.   (foreach pl (mapcar 'vlax-ename->vla-object lwp)
  20.     (setq c nil)
  21.     (if
  22.       (and (vlax-property-available-p pl 'closed) (zerop (vlax-get pl 'closed)) (setq c t))
  23.        (vlax-put pl 'closed -1)
  24.     )
  25.     (if (setq pts (vlax-invoke l 'intersectwith pl acextendthisentity))
  26.       (while pts
  27. (setq ptlst (cons (list (car pts) (cadr pts)) ptlst))
  28. (setq pts (cdddr pts))
  29.       )
  30.     )
  31.     (and c (vlax-put pl 'closed 0))
  32.   )
  33.   (if ptlst
  34.     (progn (setq ptlst (vl-sort ptlst
  35. (function (lambda (d1 d2)
  36.     (if (equal ang 0.0 pi)
  37.       (> (car d1) (car d2))
  38.       (< (cadr d1) (cadr d2))
  39.     )
  40.   )
  41. )
  42.        )
  43.    )
  44.    (while ptlst
  45.      (entmakex
  46.        (list '(0 . "LINE") (cons 8 lyr) (cons 10 (car ptlst)) (cons 11 (cadr ptlst)))
  47.      )
  48.      (setq ptlst (cddr ptlst))
  49.    )
  50.    (vla-delete l)
  51.     )
  52.   )
  53. )
  54.       )
  55.     )
  56.   )
  57.   (princ)
  58. )



发表于 2012-3-20 13:37 | 显示全部楼层
Here's another.
先选边界,再选对象

  1. (defun c:extlines (/ bound int pt)
  2.   (vl-load-com)
  3.   (or *acdoc*
  4.       (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
  5.   )
  6.   (if (and (setq bound (car (entsel "\n请选择边界: ")))
  7.     (setq bound (vlax-ename->vla-object bound))
  8.       )
  9.     (if (ssget '((0 . "LINE")))
  10.       (progn
  11. (vla-StartUndoMark *acdoc*)
  12. (vlax-for l (vla-get-ActiveSelectionSet *acdoc*)
  13.    (setq int (vlax-invoke bound 'IntersectWith l acExtendOtherEntity))
  14.    (while int
  15.      (setq pt  (list (car int) (cadr int) (caddr int))
  16.     int (cdddr int)
  17.      )
  18.      (if (< (distance (vlax-get l 'StartPoint) pt)
  19.      (distance (vlax-get l 'EndPoint) pt)
  20.   )
  21.        (vlax-put l 'StartPoint pt)
  22.        (vlax-put l 'EndPoint pt)
  23.      )
  24.    )
  25. )
  26. (vla-EndUndoMark *acdoc*)
  27.       )
  28.     )
  29.   )
  30.   (princ)
  31. )

 楼主| 发表于 2012-3-20 13:59 | 显示全部楼层
xiaxiang 发表于 2012-3-20 13:37
Here's another.
先选边界,再选对象

这个是我最喜欢的一个,哈哈哈,谢谢
发表于 2012-3-21 09:45 | 显示全部楼层
非常牛逼的样子 很喜欢啊 谢谢
发表于 2012-3-24 19:24 | 显示全部楼层
看看这个怎样?

本帖子中包含更多资源

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

x
发表于 2013-4-19 01:11 | 显示全部楼层
非常感谢,这个很好
发表于 2013-4-30 08:06 来自手机 | 显示全部楼层
这个好用,支持一下
发表于 2017-11-15 22:38 | 显示全部楼层
我想找一个 标准的用 剪切和延伸的命令,怎么都没有找到,因为两个线可能不共面,替换变量没有什么意义
发表于 2017-12-4 20:11 | 显示全部楼层
学习下22 23 26的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 04:34 , Processed in 0.170035 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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