明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 869|回复: 6

[讨论] 2019下(APPLY 'bpoly (list p ss '(1 0)))出问题了

[复制链接]
发表于 2024-6-27 07:00:46 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2024-6-28 07:19 编辑

2019下(APPLY 'bpoly (list p ss '(1 0)))出问题了,改为(vl-cmdf "-BOUNDARY" p "")就好了,而且在Bricscad表现也很好。看来bploy太不靠谱,只有在版本上能实现。

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-6-27 08:54:31 | 显示全部楼层
本帖最后由 尘缘一生 于 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))
  •         (setq  obj (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
  • )

发表于 2024-6-27 11:24:49 | 显示全部楼层
我的(vl-cmdf "-BOUNDARY" p "")2014版可以,2016版就不行,鼠标指定P点还正常,如果是计算的P点,范围太小,还需要REGEN(重生成)几次,否则(vl-cmdf "-BOUNDARY" p "")后要得到范围面积会出错,不知各位大佬有没有好代码和建议。
发表于 2024-6-27 11:46:17 | 显示全部楼层
BOUNDARY命令有视口限制,bpoly没有,这也是它的一个优势。
发表于 2024-6-27 16:23:21 | 显示全部楼层
那就自己做一个吧
发表于 2024-6-27 21:24:46 | 显示全部楼层
ACAD2021测试没问题
发表于 2024-7-3 10:32:28 | 显示全部楼层
看上黄大师的内容输入EXCEL了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 14:27 , Processed in 0.186061 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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