明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1089|回复: 5

[讨论] 麻烦优化下打断闭合曲线于两点 的自定义函数

[复制链接]
发表于 2022-4-4 20:01:32 | 显示全部楼层 |阅读模式
这个函数感觉写的有点绕,麻烦优化下,谢谢!
;打断闭合曲线于两点(闭合样条线、多段线,椭圆,圆适用,当然对这几种非闭合曲线也适用)
;(ygs-br@2p(car(entsel"\n请选择闭合线"))(getpoint"\n请点选第一点")(getpoint"\n请点选第二点"))
(defun ygs-br@2p(cls-cur p1 p2)
(setvar 'cmdecho 0)
(setq thisdrawing (vla-get-activedocument
                          (vlax-get-acad-object)))
(vla-startundomark thisdrawing)
(vla-copy(vlax-ename->vla-object cls-cur))
(if(>(vlax-curve-getparamatpoint cls-cur p1)
      (vlax-curve-getparamatpoint cls-cur p2))
(progn
   (vl-cmdf "break" (entlast)"non"(vlax-curve-getstartpoint(entlast)) "non" p2)
   (vl-cmdf "break" (entlast)"non"(vlax-curve-getendpoint(entlast)) "non" p1)
)
(progn
  (vl-cmdf "break"(entlast) "non" (vlax-curve-getstartpoint(entlast)) "non" p1)
  (vl-cmdf "break" (entlast) "non" (vlax-curve-getendpoint(entlast)) "non" p2)
)
)
(vl-cmdf "break" cls-cur "non" p1 "non" p2)
(vla-endundomark thisdrawing)
(princ)
)

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2023-3-15 14:30:21 | 显示全部楼层
Enjoy!!! 发表于 2023-3-15 14:12
打断有缺口这个能发一个吗

2楼不是写着吗
回复 支持 1 反对 0

使用道具 举报

发表于 2022-4-4 23:46:29 | 显示全部楼层
(defun br@2p (curve p1 p2)
  (if (> (vlax-curve-getparamatpoint curve p1)
         (vlax-curve-getparamatpoint curve p2)
      )
    (vl-cmdf "break" curve "non" p2 "non" p1)
    (vl-cmdf "break" curve "non" p1 "non" p2)
  )
)
 楼主| 发表于 2022-4-5 08:15:37 | 显示全部楼层
xyp1964 发表于 2022-4-4 23:46
(defun br@2p (curve p1 p2)
  (if (> (vlax-curve-getparamatpoint curve p1)
         (vlax-curve-getparamat ...

感谢院长的回复,您这代码打断后会产生缺口,我是希望闭合线的总长度不变的那种,能否再优化下,谢谢!
发表于 2022-4-7 03:05:28 | 显示全部楼层
  • ;;三领打断========
  • ;;如果选择打断第二点时右键或空格则打断于点
  • (defun c:sldaduan (/ ent p1 p2 e ang e_lst)
  •   (setq e_lst (sysvar '("osmode" "cmdecho")))
  •   (setvar "cmdecho" 0)
  •   (setvar "OSMODE" 16383)
  •   (setq e (car (setq ent (nentsel (slmsg "\n 选择要打断的对象:" "\n 選擇要打斷的對象:")))))
  •   (setq ang (+ (e-ang e nil) pi4))
  •   (if (setq p1 (getpoint (slmsg "\n 指定打断的第一点 :" "\n 指定打斷的第一點 :")))
  •     (progn
  •       (setq p1 (vlax-curve-getClosestPointTo e p1 nil))
  •       (slslx p1 ang)
  •     )
  •   )
  •   (if (setq p2 (getpoint (slmsg "\n 指定打断的第二点 , 或打断于点<右键>:" "\n 指定打斷的第二點 , 或打斷於點<右鍵>:")))
  •     (progn
  •       (setq p2 (vlax-curve-getClosestPointTo e p2 nil))
  •       (slslx p2 ang)
  •     )
  •   )
  •   (if p2
  •     (vl-cmdf ".BREAK" ent "F" p1 p2)
  •     (progn
  •       (vl-cmdf ".BREAK" ent "F" p1 "@")
  •       (vla-put-color (en2obj (entlast)) (atoi (slsjqs)))
  •     )
  •   )
  •   (redraw)
  •   (mapcar 'eval e_lst)
  •   (princ)
  • )

发表于 2023-3-15 14:12:52 | 显示全部楼层
guosheyang 发表于 2022-4-5 08:15
感谢院长的回复,您这代码打断后会产生缺口,我是希望闭合线的总长度不变的那种,能否再优化下,谢谢!

打断有缺口这个能发一个吗 285385258@qq.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 10:50 , Processed in 0.179276 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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