块统计!求完善!
(defun c:P185()(setvar "cmdecho" 0)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq pt1 (getpoint "\n左上角: "));getpoint 让用户点选一个点
(setq ww (getdist pt1 "\n宽度 <50>: "));等待用户输入一个距离值或用鼠标点选
(if (null ww) (setq ww 40.0));判断用户输入的距离是否为空,为空则默认为40.0
(setq hh (getdist pt1 "\n每格高度 <8>: "));等待用户输入每格的高度
(if (null hh) (setq hh 8.0));判断用户输入的值是否为空,为空则默认为8.0
(setq pt2 (polar pt1 0 ww));
(setq pt3 (polar pt2 (* pi 1.5) hh))
(setq pt4 (polar pt1 (* pi 1.5) hh))
(command "pline" pt1 pt2 pt3 pt4 "c")
(setq pt5 (polar pt1 0 (/ ww 2)))
(setq pt6 (polar pt5 (* pi 1.5) hh))
(command "line" pt5 pt6 "")
(command "text" "m" (inters pt1 pt6 pt4 pt5) (/ hh 2) 0 "图块名称")
(command "text" "m" (inters pt5 pt3 pt2 pt6) (/ hh 2) 0 "数量")
(setq blk (tblnext "block" t))
(while blk
(setq blkn (assoc 2 blk))
(setq blk_key (substr (cdr blkn) 1 1))
(if (/= blk_key "*")
(progn
(setq ss (ssget "X" (list blkn)))
(if (null ss)
(setq ssn 0)
(setq ssn (sslength ss))
)
(setq blknn (cdr blkn))
(setq pt1 pt4 pt5 pt6 pt2 pt3)
(setq pt4 (polar pt1 (* pi 1.5) hh))
(setq pt6 (polar pt5 (* pi 1.5) hh))
(setq pt3 (polar pt2 (* pi 1.5) hh))
(command "pline" pt2 pt3 pt4 pt1 "")
(command "line" pt5 pt6 "")
(command "text" "m" (inters pt1 pt6 pt4 pt5) (/ hh 2) 0 blknn)
(command "text" "m" (inters pt5 pt3 pt2 pt6) (/ hh 2) 0 (itoa
ssn))
)
)
(setq blk (tblnext "block"))
)
(setvar "osmode" os)
(prin1)
)
求高手帮忙把此程序改一下,希望统计的块是让用户自己选取一个范围内的!上面的这程序是统计了整个图上所有的图块了! 高手们帮忙改一下!最好能让程序自动判断出块名字的最长一个而表的每格就刚好是能放心最长的那个快名称! 高手能给点怎么取得块的名称最长的一个的思路也行!还有用什么函数实现,最好不要是VL-开头的这种……!
小弟在这先谢谢了! 下面的连接你可以参考下,也是源码
http://bbs.mjtd.com/thread-90798-1-1.html 不用这么麻烦,工具里--数据提取就带着个功能,块的所有属性都可以列表导出。不过楼主的代码很好,学习了。 学习~~~~~~ 学习中。 本帖最后由 fcut2004 于 2012-10-26 08:46 编辑
把这句改改(setq ss (ssget "X" (list blkn))),就可以自己框选范围了。最好再结合重叠块的子程序。1、判断没有重叠的块。2、统计数量。 路过看看顶一个 学习了顶一下
页:
[1]