问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

CAD中一次性把所有相交点都打断的程序LISP程序,谢谢,我的邮箱是313013264@qq.com,不胜感激~

发布网友 发布时间:2022-05-30 21:02

我来回答

2个回答

热心网友 时间:2023-11-18 04:01

;;主函数
(defun c:MBB (/ elist ssg n t0)
(VL-LOAD-COM)
(setq t0 (xdl-getutime))
(if (setq ssg (ssget '((0 . "line,arc,circle,ellipse"))))
(vlax-for obj (vla-get-activeselectionset
(vla-get-activedocument (vlax-get-acad-object))
)
(setq elist (cons obj elist)) ; ssg->elist
)
)
(DoEntMake (InterSort (ssinter elist)))
(princ (strcat "\n*****找到交点"
(itoa n)
"个,交点断开操作共耗时"
(rtos (- (xdl-getutime) t0) 2 3)
"秒。*****"
)
)
(princ)
)
;;求交点集函数-nth
;;经过测试,nth函数仅比assoc函数快一点点。
;;故此函数也可取消i,j变量,直接使用assoc函数
(defun ssinter (el / el1 obj1 obj2 ipts pts list1 outlst i j)
(setq outlst (mapcar 'list el)
i -1 ;obj1位置指针
n 0 ;交点数计数器
)
(while el
(setq obj1 (car el)
list1 (nth (setq i (1+ i)) outlst) ;obj1已有的交点列表
el (cdr el)
el1 el
j i ;obj2位置指针
)
(while el1
(setq obj2 (car el1)
el1 (cdr el1)
j (1+ j)
)
;;取交点
(if (and (setq ipts (vla-intersectwith obj1 obj2 0))
(setq ipts (vlax-variant-value ipts))
(> (vlax-safearray-get-u-bound ipts 1) 0)
)
(progn
(setq ipts (vlax-safearray->list ipts)
pts '() ;obj1,obj2交点临时列表变量
)
(while (> (length ipts) 0)
(setq pts (cons (list (car ipts)
(cadr ipts)
(caddr ipts)
)
pts
)
ipts (cdddr ipts)
)
)
(setq list1 (append list1 pts) ;存obj1交点表,循环结束后再更新
n (+ n (length pts)) ;交点计数累加
)
;;obj2的交点列表立即更新
(setq
outlst (subst (append (nth j outlst) pts)
(nth j outlst)
outlst
)
)
)
)
)
;;当obj1存在交点,且非封闭曲线,添加两端点
(if (and (cdr list1) (not (vlax-curve-isClosed obj1)))
(setq list1 (append list1
(list (vlax-curve-getEndPoint obj1))
(list (vlax-curve-getStartPoint obj1))
)
)
)
(setq outlst (subst list1 (nth i outlst) outlst)) ;更新obj1交点列表
)
outlst
)
;;点集排序及删除重复点函数
(defun InterSort (el / obj1 pts plst outlst)
(setq outlst '()) ;empty list
(foreach item el
(setq obj1 (car item)
pts (cdr item)
plst '() ;empty list
)
(if pts ;若无交点,则不修改该实体
(progn
;;交点排序,列表为逆序
(setq
pts (vl-sort
pts
(function (lambda (p1 p2)
(< (vlax-curve-getParamAtPoint obj1 p1)
(vlax-curve-getParamAtPoint obj1 p2)
)
)
)
)
)
;;剔除重复点并将列表顺序转正
(foreach p pts
(if plst
(if (not (equal p (car plst) 0.00001))
(setq plst (cons p plst))
)
(setq plst (cons p plst))
)
)
;;闭合曲线需再添加首个交点以使新实体完全封闭
(if (vlax-curve-isClosed obj1)
(setq plst (cons (last plst) plst))
)
(setq plst (cons (vlax-vla-object->ename obj1) plst)
outlst (cons plst outlst)
)
)
)
)
outlst
)
;;调用entmake生成新实体
(defun DoEntMake (el / obj objlst objname objcen objratio objaxis)
(foreach e el
(setq obj (car e)
objlst (entget obj)
objlst (vl-remove (assoc -1 objlst) objlst) ;去除图元名
objlst (vl-remove (assoc 330 objlst) objlst) ;去除id
objlst (vl-remove (assoc 5 objlst) objlst) ;去除句柄
objname (cdr (assoc 0 objlst))
)
(cond
((= objname "LINE")
(repeat (- (length e) 2)
(setq e (cdr e))
(setq objlst (subst (cons 10 (car e)) (assoc 10 objlst) objlst))
(setq objlst (subst (cons 11 (cadr e)) (assoc 11 objlst) objlst))
(entmake objlst)
)
(entdel obj)
)
((= objname "CIRCLE")
(setq objcen (cdr (assoc 10 objlst)))
(setq objlst (subst (cons 0 "ARC") (assoc 0 objlst) objlst))
(setq objlst (append objlst
(list (cons 100 "AcDbArc")
(cons 50 0.0)
(cons 51 0.0)
)
)
)
(repeat (- (length e) 2)
(setq e (cdr e))
(setq objlst (subst (cons 50 (angle objcen (cadr e)))
(assoc 50 objlst)
objlst
)
)
(setq objlst (subst (cons 51 (angle objcen (car e)))
(assoc 51 objlst)
objlst
)
)
(entmake objlst)
)
(entdel obj)
)
((= objname "ARC")
(setq objcen (cdr (assoc 10 objlst)))
(repeat (- (length e) 2)
(setq e (cdr e))
(setq objlst (subst (cons 50 (angle objcen (cadr e)))
(assoc 50 objlst)
objlst
)
)
(setq objlst (subst (cons 51 (angle objcen (car e)))
(assoc 51 objlst)
objlst
)
)
(entmake objlst)
)
(entdel obj)
)
((= objname "ELLIPSE")
;;椭圆圆心
(setq objcen (cdr (assoc 10 objlst)))
;;相对于中心的长轴矢量
(setq objaxis (cdr (assoc 11 objlst)))
;;短轴与长轴的比例
(setq objratio (cdr (assoc 40 objlst)))
(repeat (- (length e) 2)
(setq e (cdr e))
(setq objlst (subst (cons 41 (pt->param (cadr e) objcen objaxis objratio))
(assoc 41 objlst)
objlst
)
)
(setq objlst (subst (cons 42 (pt->param (car e) objcen objaxis objratio))
(assoc 42 objlst)
objlst
)
)
(entmake objlst)
)
(entdel obj)
)
)
)
)
;;计算耗时
(defun xdl-getutime ()
(* 86400 (getvar "tsrtimer"))
)
;;求椭圆曲线参数
(defun pt->param (pt cen axis ratio / ang param)
(setq ang (- (angle cen pt) (angle '(0. 0. 0.) axis)))
(cond ((= (cos ang) 0.0) ;防止分母cos为零出错
(if (> (sin ang) 0.0)
(setq param (* 0.5 PI))
(setq param (* 1.5 PI))
)
)
((= (sin ang) 0.0)
(if (> (cos ang) 0.0)
(setq param 0.0)
(setq param PI)
)
)
(T
(setq param (atan (/ (sin ang) (* (cos ang) ratio))))
(if (< (cos ang) 0.0)
(setq param (+ pi param))
)
)
)
param
)
(princ)
这个你看下

热心网友 时间:2023-11-18 04:02

这个程序不错,很适用。但能不能改成部分打断,比如纵横交错的线中只打断横向线不打断纵向线?或者只打断图层1的线不打断图层2的线?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...图纸制成清单、CAD图纸 2、根据客户的图纸来摘出石材的 《甄嬛传》沈眉庄对太后好,究竟是为了得到庇护还是一份真心呢? 为什么《甄嬛传》中甄嬛复宠大费周章,而沈眉庄扔个镯子就可以重获圣心... 医用测试议注册商标属于哪一类? 感冒这个症状,吃什么药呢?先是嗓子特别疼,好像扁桃体炎严重了,之后鼻子... 斯特林制冷机注册商标属于哪一类? 喉咙痛,感冒..头有点晕 恒温酒柜注册商标属于哪一类? ...话了,而且还不停地打喷嚏,不会是流感吧?吃什么药会好的快点?_百度... 手电筒照射相机镜头会不会有损伤 蜗居里最奸诈的人 一首表白藏头诗 她的名字叫樊利娜!求各位大神帮我 在EXCEL中,怎么把一个区域内相同的数值查找出来。可以是文字,可以是数字。 matlab 模块里的abc-to-dq0模块的dq轴貌似和书本上的相反啦,还有matlab模块中3s&#47;2r好像系数都少了个根号 求三相电动机双向启动反接制动控制线路的工作原理以及分析KM1.KM2.KM3.KA1.KA2.KA3.KA4.KS-1.KS-2的作用 CCTV12普法栏目剧万家灯火第四季谁有演员表啊! 有谁知道河北廊坊东沽港樊丽娜的工作地址,手机和QQ的请拜托告诉我,夫妻因为家庭和琐事的原因分开, 樊氏取名 我想问一下普法栏目剧爱情坐标里的康艳的个人资料还有图片可以去哪下载的到 河北宜韶扬园林绿化工程有限公司怎么样? 微观经济学计算题求帮忙 东港市山城大药房有限公司怎么样? 山东卫视昨天播的道德与法制栏目,纸伞惊梦这一期。里面那个女演员张丽萍是谁演的啊。看这满有味道的 祝樊丽娜生日快乐 学宪法-讲宪法主题班会教案 北京万木春文化有限公司怎么样? 蒋欣演技爆发力太强了,她演过哪些火出圈的角色? 老婆生日藏头诗(樊丽娜) 樊丽娜这几个字一共多少笔画 官场行为,潜规则,语言,超级高分哦!!! 谢谢你的回答,大一学习了C++.模电,大二学习数电,单片机,目前在学习ARM,操作系统。但是,最感兴趣 下面的这个在keil下编译出现的问题是什么原因 急啊 谁有能用的CAD XZBH自动编号的程序 用CAD的F2命令框粘贴点坐标后有没有什么办法直接在点旁边出现Z值? 求邵贝贝的《嵌入式实时操作系统UCOS》 换微信后原来微信登录的学堂在线的记录还能保留吗? 微信大学堂的课程怎么样?有使用过的讲讲看 北汽EU系列电池的电压平台是多少伏? 北汽新能源EU5、EU400、EU快换版如何更换电池? 干电池EU的指令是什么 北汽EU300电池转让 北汽eu+5怎样充电对电池好 北汽新能源EU5、EU400、EU快换版12V蓄电池故障警告灯是什么? EU2020-51E手表所用电池的型号 北汽新能源EU5、EU400、EU快换版动力电池故障警报灯是什么? 把姥爷能叫姥吗? 我的血压是 83/51属于正常吗? 今天下午心慌的时候量了血压,高压100 低压63,现在什么事都没有,刚刚量的血压是高压83 低压4 天刀62级才4600的功力,怎么提高功力 上海老年大学 交大分校怎么样