2019下(APPLY 'bpoly (list p ss '(1 0)))出问题了
本帖最后由 自贡黄明儒 于 2024-6-28 07:19 编辑2019下(APPLY 'bpoly (list p ss '(1 0)))出问题了,改为(vl-cmdf "-BOUNDARY" p "")就好了,而且在Bricscad表现也很好。看来bploy太不靠谱,只有在低版本上能实现。 本帖最后由 尘缘一生 于 2024-6-27 20:28 编辑
我使用怎么正相反呢?BOUNDARY如果中断出错,下面不能执行,BPOLY可以
目前,三领这么作的,这个问题也是永无解的。
[*];;从一个点求到某个方向最近线的距离---(一级)----
[*];;返回: 距离nil
[*](defun snearlin (pt ang / dis ss n lst p0 p1 obj nam0 pl)
[*](setq p0 (polar pt ang (getvar "VIEWSIZE")))
[*](if(setq ss (ssget "F" (list pt p0) '((0 . "LINE,LWPOLYLINE,POLYLINE"))))
[*] (progn
[*] (entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 p0)))
[*] (setq nam0 (entlast))
[*] (repeat (setq n (sslength ss))
[*] (setqobj (en2obj (ssname ss (setq n (1- n)))))
[*] (if (setq pl (vl-catch-all-apply 'vlax-invoke (list (en2obj nam0) 'IntersectWith obj acExtendNone)))
[*] (setq p1 (list (car pl) (cadr pl) (caddr pl)))
[*] (setq p1 (trans (vl-catch-all-apply 'vlax-curve-getclosestpointto (list obj (trans pt 1 0) t)) 0 1))
[*] )
[*] (if (and p1 (> (setq dis (distance pt p1)) 0))
[*] (setq lst (cons dis lst))
[*] )
[*] )
[*] (entdel nam0)
[*] )
[*])
[*](if lst (setq dis (apply 'min lst)) (setq dis nil))
[*]dis
[*])
[*];;enam、p0四周线框包容四角点、实体中点表----(一级)----
[*];;返回 (单元格左下 单元格右下 单元格右上 单元格左上实体中心或点))
[*](defun enear4p (obj / plis p0 pz py ps px p1 p2 p3 p4 d1 d2 d3 d4)
[*](cond
[*] ((= (type obj) 'ENAME) (setq plis (ebox4 obj) p0 (sl:mid (car plis) (caddr plis)))) ;图元
[*] ((= (type obj) 'LIST) (setq p0 obj)) ;点
[*])
[*](setq d1 (snearlin p0 pi) d2 (snearlin p0 0) d3 (snearlin p0 pi2) d4 (snearlin p0 3pi2))
[*](if (and d1 d2 d3 d4 (> d1 0) (> d2 0) (> d3 0) (> d4 0))
[*] (setq
[*] pz (polar p0 pi d1)
[*] py (polar p0 0 d2)
[*] ps (polar p0 pi2 d3)
[*] px (polar p0 3pi2 d4)
[*] p1 (list (car pz) (cadr px) 0)
[*] p2 (list (car py) (cadr px) 0)
[*] p3 (list (car py) (cadr ps) 0)
[*] p4 (list (car pz) (cadr ps) 0)
[*] plis (list p1 p2 p3 p4 p0)
[*] )
[*] (setq plis nil)
[*])
[*]plis
[*])
[*]
[*];;三领设计 V3.0 boundary----(一级)-----
[*];;modify 尘缘一生qq:15290049
[*](defun sl-bound (p0 / en lis)
[*](if (/= (vl-catch-all-apply '(lambda () (bpoly p0))) nil) ;若此处取不到边界
[*] (setq en (entlast))
[*] (if (setq lis (enear4p p0)) ;转为左右上下求最近线的点作
[*] (progn
[*] (makelwpolyline (list (car lis) (cadr lis) (caddr lis) (cadddr lis)) 0 t)
[*] (setq en (entlast))
[*] )
[*] )
[*])
[*]en
[*])
我的(vl-cmdf "-BOUNDARY" p "")2014版可以,2016版就不行,鼠标指定P点还正常,如果是计算的P点,范围太小,还需要REGEN(重生成)几次,否则(vl-cmdf "-BOUNDARY" p "")后要得到范围面积会出错,不知各位大佬有没有好代码和建议。 BOUNDARY命令有视口限制,bpoly没有,这也是它的一个优势。 那就自己做一个吧 ACAD2021测试没问题 看上黄大师的内容输入EXCEL了
页:
[1]