cad批量交点打断 lisp_晓东CAD家园-论坛-A/VLISP-批量交点打断-各位有批量交点打断!!各自塞下 总有个你觉得很好 - Powered by Discuz!...

本文提供了使用LISP语言批量处理CAD图形中线段、圆弧、椭圆等交点打断的方法。通过定义多个函数,如`THINKING`、`removedups`等,实现了去除重复点、判断端点、按曲线排序交点等功能,并对不同类型的曲线(如直线、圆弧、样条曲线)进行分段处理。整个过程涉及CAD图形的参数化处理和交互式打断操作。
摘要由CSDN通过智能技术生成

贴一个复杂的

[pcode=lisp,true](defun c:Ea:ssbrk (/                 THINKING      removedups

ybl-pts-sortoncurve               ybl-mklwpline

ybl-mkellipse ybl-mkline    ybl-mkarc

ybl-circletoarc               sstolist

lll                 ss               cset

eDoc                 n               oldos

t1                 sl

)

(defun THINKING (prmpt)

(setq n (1+ n))

(princ (strcat "\r"

(nth (rem n 4) '("|" "/" "-" "\\"))

prmpt

)

)

)

(defun removedups (lst / p pl)

(while lst

(setq p (car lst))

(if (not (equal p (car pl)))

(setq pl (cons p pl))

)

(setq lst (cdr lst))

)

(reverse pl)

)

;;端点判断

(defun ispoint (lst p1 p2)

(and (= (length pts) 2)

(or (and (equal (car pts) sp 1e-9)

(equal (cadr pts) ep 1e-9)

)

(and (equal (car pts) ep 1e-9)

(equal (cadr pts) sp 1e-9)

)

)

)

)

;;Break 去除端点

(defun removepoint (lst p1 p2)

(if        (equal (car lst) p1 1e-9)

(setq lst (cdr lst))

)

(if        (equal (last lst) p2 1e-9)

(setq lst (reverse (cdr (reverse lst))))

)

lst

)

;;交点沿曲线排升序

(defun ybl-pts-sortoncurve (e pts / pl sp ep el typ)

(if        (and (setq sp (vlax-curve-getstartpoint e)

ep (vlax-curve-getendpoint e)

)

(ispoint pts sp ep)

) ;_ startpoint and endpoint

(setq pts nil)

;;circle ellipse 不一定需要 startpoint endpoint

(progn

(if (not (vlax-curve-isclosed e))

(setq pts (cons sp (cons ep pts)))

)

(setq

pts

(removedups

(vl-sort

(mapcar '(lambda        (x)

(list        (vlax-curve-getparamatpoint

e

(vlax-curve-getclosestpointto e x)

)

x

)

)

pts

)

'(lambda (e1 e2) (< (car e1) (car e2)))

)

)

)

)

) ;_ remove startpoint

pts

)

;;断开 spline pline,闭合 spline 不能打断

(defun ybl-brkspline (lst / e pts p0 pam)

(setq e   (car lst)

pts (reverse (mapcar 'cadr

(ybl-pts-sortoncurve

e

(cdr lst)

)

)

) ;_ 逆序)

)

(if        pts

(if (and (vlax-curve-isclosed e) ;_ closed

(> (length pts) 1)

) ;_两个以上交点才断开

(progn

(setq        p0  (car pts)

pts (cdr pts)

pam (vlax-curve-getparamatpoint

e

(vlax-curve-getclosestpointto e p0)

)

)

(vl-cmdf ".break"

e

"_non"

p0

"_non"

(vlax-curve-getpointatparam e (+ pam 0.0000001))

) ;_两个交点以上先断开一个小口

(setq pts (removepoint pts sp ep))

(if pts

(foreach p pts

(vl-cmdf ".break" e p p)

)

)

)

(progn ;_ opened

(setq        pts (removepoint

pts

(vlax-curve-getstartpoint e)

(vlax-curve-getendpoint e)

)

)

(if pts

(foreach p pts

(vl-cmdf ".break" e p p)

)

)

)

)

)

)

(defun ybl-mklwpline (lst  /          e    el   pts         c70  h0   h1        pl

vn   i          vp   vvp  v         nnp  tf   p1        b

vn   vertexinfo            l         a    bugle        e

ew   few  forp fsw  spam sw   x

)

(setq e   (car lst)

el  (entget e '("*"))

c70 (cdr (assoc 70 el))

)

(if        (or (= (logand c70 4) 4) ;_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值