明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 635|回复: 6

[提问] 如何用lisp实现这样的功能

[复制链接]
发表于 2023-12-7 13:42 | 显示全部楼层 |阅读模式
如何用lisp实现断开的部分自动补上,超出的部分自动修剪?

本帖子中包含更多资源

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

x
发表于 2023-12-7 15:07 | 显示全部楼层
本帖最后由 飞雪神光 于 2023-12-7 19:59 编辑

这是边界为多段线 内部为直线的重画方法
  1. (setq
  2.         ty(car(entsel "\n选择多段线边界:"))
  3.         obj (vlax-ename->vla-object ty)
  4.         pts (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ty)))
  5.         ss (ssget "cp" pts '((0 . "LINE")))
  6. )
  7. (foreach ty (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss)))
  8.         (setq ptl '())
  9.         (setq obj1 (vlax-ename->vla-object ty))
  10.         (setq pts (vlax-invoke obj 'Intersectwith obj1 2))
  11.         (while pts
  12.                 (setq ptl (cons (list (car pts) (cadr pts)) ptl))
  13.                 (setq pts (cdddr pts))
  14.         )  
  15.         (if (= (length ptl) 2)
  16.                 (progn
  17.                         (entmake (list '(0 . "line") (cons 62 1) (cons 10 (car ptl)) (cons 11 (cadr ptl))))
  18.                         (entdel ty)
  19.                 )
  20.         )
  21. )
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-7 14:53 | 显示全部楼层
计算直线上两点 与边界的关系 来确定修剪和延伸 或者用交点去更新原直线点  或者不做判断直接求交点去更新或重画线
发表于 2023-12-7 16:29 | 显示全部楼层
需要的条件有点少,例如这是有图层区别?还是纯矩形?想要命令?还是全自动?
发表于 2023-12-7 17:47 | 显示全部楼层


命令:tt5
本人不缺币,支持论坛发展,无币想要的充币吧。

本帖子中包含更多资源

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

x
发表于 2023-12-8 09:18 | 显示全部楼层
直接边界内,所有直线延长超过边界线,再统一修剪
发表于 2023-12-9 23:40 | 显示全部楼层
厉害了,加油
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 09:41 , Processed in 0.298591 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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