还差好远啊,怎么办呢 如果图中含封闭图形,必须炸开,才能选择 G版主,太经典了,下载学习,我有个类似的问题需要解决。
辅助函数复原
本帖最后由 chshsl 于 2017-8-9 11:17 编辑经过2天的研究G大侠的代码及网盘函数库,复原了,所缺的几个函数,见大家都希望补全,现贴上。希望G大侠不要见怪。用法:1楼中的 辅助函数+8楼代码+本代码。;命令: (gxl-massoc 10 (entget (car (entsel "选择多段线:")))) 选择多段线:((35846.5 18949.5)
;(36264.4 18956.0) (36617.2 18954.3))
;
(defun gxl-massoc ( d li /als )
(setq ls '())
(while (assoc d li)
(progn
(setqa (assoc d li))
(setq ls (cons (list (cadr a) (caddr a)) ls))
(setq li (xdlsp_list_remove lia))
)
)
(reverse ls)
)
(defun xdlsp_list_remove (el val)
(if (member val el)
(append
(reverse (cdr (member val (reverse el))))
(cdr (member val el))
)
el
)
)
;输出50个空格
;(gxl-Str-Space 50) " "
;(gxl-Str-Space -1)
(defun gxl-Str-Space ( d/a )
(setq a "")
(if (>d 0)
(repeat d
(setq a (strcat a " " ))
)
)
a
)
;删除表中重复项
(defun gxl-ListDumpAtom( l1 /l2)
(while(setq l2(cons(car l1)l2) l1(vl-remove(car l1)(cdr l1))))
(reverse l2)
)
;;主测试函数
;;;测试
(defun c:mkpoly2 ()
;;(setundoerr)
(princ "\n自动拓扑多边形测试!编制:Gu_xl 2010年8月")
(princ "\n选择线段:")
;;;选择的线段必须已经做完打断预处理,请自行添加处理代码
;(if (not jd) (setq jd 0.00001))
(setq jd 0.00001)
(setq ss (ssget '((0 . "line,arc"))))
(setq t1 (getvar "cdate"))
(setq ssl (GXL-SEL-SS->LIST ss))
(setq nod1 (gxl-ent->Nodes ssl jd))
(setq coordlist (gxl-ent->Coordinates(car nod1)))
(setq touplist (gxl-Toupu-LineList coordlist))
(setq polylist (gxl-MakePolyList touplist coordlist(cadr nod1)))
(setq polylist (gxl-dumpPolyTouPuList polylist))
(setq n 1)
(foreach poly polylist
(setq enlist (mapcar '(lambda (x) (nth (1- (abs x)) ssl)) poly)
enss (GXL-SEL-LIST->SS enlist)
)
(setq en (entlast))
(command "copy" enss "" '(0 0 0) '(0 0 0))
(setq enss (GXL-SEL-ENTNEXTALL en))
(command "pedit" (ssname enss 0) "y" "j" enss "" "")
(setq en (entlast))
(gxl-CH_Ent en 62 1)
(gxl-CH_Ent en 8 "多边形层")
)
(princ "\n总计 ")
(GXL-SYS-TIMEOUT t1)
(princ "\n共生成 ")
(princ (length polylist))
(princ " 个多边形!")
;(reerr)
) 大侠们,G版主的这个代码,在CAD2008 32位 win7 64位下可以运行,CAD2004 XP下不能运行。求帮助。 学习学习 过来学习学习。 这个真牛 期待版主公布更多的源码!不太懂的版友们是要自己不断拿源码调试修改才能变成自己的。或者说这个就是模仿过程。我也知道大概的原理楼主已经公布了。对于不够精的版友来说,差一点不会就不会。差之毫厘失之千里。当然也尊重楼主的知识产权,如果不方便也非常能理解!