面域转多段线
本帖最后由 nyistjz 于 2024-11-10 11:14 编辑我计划写个程序,把面域分解一下,再合并成多段线,但是不成功,应该是无法选中分解后的所有线段。
还请朋友们帮忙看一下怎么修改程序,感谢 !
(defun c:gg()
(setq ss (ssget))
(while (setq s (ssget "p"))
(command-s "explode" s "")
)
(setq ss (ssget "p"))
(command-s "pedit" "m" ss "" "J" "J" "E" 0 "")
)
修正好的源码在7楼!
本帖最后由 xyp1964 于 2024-11-10 16:43 编辑
(defun c:tt ()
"面域转多线"
(if (setq ss (ssget '((0 . "region"))))
(progn
(setvar "qaflags" 1)
(setq s0 (entlast))
(command-s "explode" ss "")
(setq ss (ssadd))
(while (setq s0 (entnext s0)) (ssadd s0 ss))
(setvar "PEDITACCEPT" 1)
(command "pedit" "M" ss "" "j" "j" "B" 0 "")
)
)
(princ)
)
QAFLAGS 与爆破有关
PEDITACCEPT 与多段线联接有关
搞定这两个变量,基本上就成了。 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=186369&highlight=%C3%E6%D3%F2%D7%AA 汉域-奎 发表于 2024-11-9 17:16
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=186369&highlight=%C3%E6%D3%F2%D7%AA
这个贴子有看到,感觉太长了,想用cmd写的短一点。 nyistjz 发表于 2024-11-9 19:25
这个贴子有看到,感觉太长了,想用cmd写的短一点。
我是把REGIONT复制到块里边去分解,然后取所有线段的首尾点坐标来进行串线的,不过由于自己使用情况不会涉及到凸度,所以意义不太大 本帖最后由 llsheng_73 于 2024-11-9 20:33 编辑
你这里应该主要是差一个自动转换。。。。
PEDITACCEPT 系统变量
禁止在 PEDIT 中显示“选定的对象不是多段线”提示。 该提示后会显示“是否将其转换为多段线?” 输入 y 可将选定对象转换成多段线。 当该提示被禁止显示时,选定对象将自动转换为多段线。
0显示提示
1抑制提示
(defun c:gg()
(setq x(entlast))
(setq ss (ssget))
(while (setq s (ssget "p"))
(command-s "explode" s "")
)
(setq cm (getvar "cmdecho"))
(setvar'cmdecho 0) ;指令执行过程不响应
(setvar 'peditaccept 1) ;加入这个系统变量的代码,转化为多段线
(command-s "pedit" "m" (i:newss x) "" "J" "J" "E" 0 "")
(setvar "cmdecho" cm)
)
;获取在图元 en 之后产生的选择集 caoyin 2009-1-5 http://bbs.mjtd.com/thread-73098-1-1.html
(defun i:newss(en / ss) ;(setq x(entlast)) (if (i:newss x)) ;判断新图元
(if en (progn
(setq ss (ssadd)) ;建立空集
(while (setq en (entnext en)) ;当en后有对象时
(if (not (member (cdr (assoc 0 (entget en))) '("ATTRIB" "VERTEX" "SEQEND"))) (ssadd en ss) ) ) ;把en后的对象加入到空集
(if (zerop (sslength ss)) (setq ss nil))
ss)
(ssget "x")
) )
;;==============================================
(defun c:gg()
(setq ss (ssget))
(setq s00 (entlast))
(setq ssss (ssadd))
(command "select" ss "")
(setq sss (ssget "p" '((0 . "region"))))
(while (and sss (> (sslength sss) 0))
(setq s0 (entlast))
(command-s "explode" sss "")
(while (and (setq s0 (entnext s0))
(setq xx (entget s0))
(not (wcmatch (cdr (assoc 0 xx)) "VERTEX,SEQEND,ATTRIB"))
)
(ssadd s0 sss)
)
(command "select" sss "")
(setq sss (ssget "p" '((0 . "region"))))
)
(while (and (setq s00 (entnext s00))
(setq xx (entget s00))
(not (wcmatch (cdr (assoc 0 xx)) "VERTEX,SEQEND,ATTRIB"))
)
(ssadd s00 ssss)
)
(command-s "pedit" "m" ssss "" "J" "J" "E" 0 "")
)
xyp1964 发表于 2024-11-10 11:09
不是源码,对学习和讨论没啥用。
页:
[1]