明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1031|回复: 16

[提问] 多段线单向剪切

[复制链接]
发表于 2023-11-19 16:17 | 显示全部楼层 |阅读模式
我希望做个一个插件,先选择多段线,在选择方向,就可以把多段线范围内,该方向的线全部减掉。我自己做出来的是2点多段线的,想请教各位大神,如果多段线是多节点多段线,应该怎么做。

  1. (defun err1 (msg)
  2.   (command)
  3.   (setvar "OSMODE" osmode_bak)
  4.   (setvar "CMDECHO" cmdecho_bak)
  5.   (command "_.undo" "_end");;定义撤销结束处
  6.   (setq *error* olderr)
  7.   (princ)
  8. )
  9. (defun c:tt(/ )
  10.   (command "_.undo" "_begin");;定义撤销开始处
  11.   (setq olderr *error*
  12.         *error* err1
  13.   );定义错误函数
  14.   (setq osmode_bak (getvar "OSMODE"));;记录当前捕捉设置
  15.   (setq cmdecho_bak (getvar "CMDECHO"));;记录当前回显设置
  16.   (setvar "OSMODE" 0)
  17.   (setvar "CMDECHO" 0)
  18.   (setq rongcha 0.1);设置容差
  19.   (setq ss (ssget ":E:S"  '((0 . "*LINE"))))
  20.   (setq en (ssname ss 0))
  21.   (setq p1 (getpoint "\n剪切方向"));用户坐标
  22.   (command "OFFSET" rongcha en p1 "")
  23.   (setq e1 (entlast))
  24.   (setq pt1 (vlax-curve-getstartpoint e1))
  25.   (setq pt2 (vlax-curve-getendpoint e1))
  26.   (entdel e1)

  27.   (setq pt1 (trans pt1 0 1)
  28.         pt2 (trans pt2 0 1)
  29.   );转为用户坐标
  30.   (command "_trim" en "" "F" pt1 pt2 "")
  31.   (setvar "OSMODE" osmode_bak)
  32.   (setvar "CMDECHO" cmdecho_bak)
  33.   (command "_.undo" "_end");;定义撤销结束处
  34.   (princ)
  35. )


发表于 2023-11-23 15:22 | 显示全部楼层


封閉圖形(含多段線)剪切

取自國外論壇
http://www.theswamp.org/index.php?topic=24646.30

封閉圖形剪切 CookieCutter2 v1.2.lsp
執行指令cc
               1.擇圓或閉合多段線、橢圓或樣條曲線來修剪邊緣:
               2.選取一側的點(物體內側或外側)進行修剪: 外側
               3.擦除裡面的所有物體 外側? [Yes/No] <N>:  N

本帖子中包含更多资源

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

x
回复 支持 2 反对 0

使用道具 举报

发表于 2023-11-22 18:07 | 显示全部楼层
用intersection函数获取拟剪切对象与剪切多段线的交点,以交点为分界点,将拟剪切多段线分解成多个图元,然后分别判断各个图元是否是你需要的,是则保留,不是则删除。
需要一个判断点在多段线内外的算法,还有点在多段线上下的算法。
发表于 2023-11-19 18:55 | 显示全部楼层
多段线如果有自相交的话会挺麻烦的
记得et工具有一个批量剪切命令
不如就用那个

 楼主| 发表于 2023-11-19 19:02 | 显示全部楼层
masterlong 发表于 2023-11-19 18:55
多段线如果有自相交的话会挺麻烦的
记得et工具有一个批量剪切命令
不如就用那个

谢谢长老,我们现在已经不允许用acad了,单位买的中望。自己写自己用,不用很完美。有缺陷,自己心里有数就行。

点评

中望也有超级修剪的命令,extrim  发表于 2023-11-22 19:15
 楼主| 发表于 2023-11-22 19:39 | 显示全部楼层
freedom_ice 发表于 2023-11-22 18:07
用intersection函数获取拟剪切对象与剪切多段线的交点,以交点为分界点,将拟剪切多段线分解成多个图元,然 ...

感觉好复杂,我研究下。谢谢您了。
发表于 2023-11-23 12:12 | 显示全部楼层
本帖最后由 lee50310 于 2023-11-23 12:14 编辑

提供思路 => 可參考2個範例
1[源码] <*** 畫線裁減實體:點選側灰階 & 刪除 ***>
http://bbs.mjtd.com/thread-187988-1-1.html


2.[源码] <*** 修剪水平線和垂直線 ***>
http://bbs.mjtd.com/thread-188120-1-1.html
 楼主| 发表于 2023-11-23 13:06 | 显示全部楼层
lee50310 发表于 2023-11-23 12:12
提供思路 => 可參考2個範例
1[源码]
http://bbs.mjtd.com/thread-187988-1-1.html

谢谢您的指导。
发表于 2023-11-23 14:00 | 显示全部楼层

看看这是不是你想要的效果

 楼主| 发表于 2023-11-23 15:22 | 显示全部楼层
fangmin723 发表于 2023-11-23 14:00
看看这是不是你想要的效果

是的,真牛逼。听说.net比lisp强大很多。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 19:58 , Processed in 0.358241 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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