![]() |
得到caoyin大哥的子块插入点的程序,现在还有一个疑问
得到caoyin大哥的子块插入点的程序,现在还有一个疑问
www.dimcax.com 得到caoyin大哥的子块插入点的程序,现在还有一个疑问 ;;;;;把读来的文件写空 (defun c:tt(/ lst ena_data m41 m42 m43 ang binsert enalast) (setq lst (nentsel)) (if (> (length lst) 3) (progn (setq ena_data (entget (last (last lst))) m41 (dxf 41 ena_data) m42 (dxf 42 ena_data) m43 (dxf 43 ena_data) ang (angtos (dxf 50 ena_data)) blayer (dxf 8 (last (last lst))) ) (setq binsert (get-blockinsert lst)) (setvar "cmdecho" 0) (entmake (entget (car lst))) (setq enalast (entlast)) (if (/= m41 1) (command "scale" enalast (list 0 0 0) m41)) (if (/= ang "0") (command "rotate" enalast (list 0 0 0) ang)) (command "move" (entlast) "" (list 0 0 0) binsert) (setq ena_data (entget (entlast)) enatype (dxf 0 ena_data) m8 (dxf 8 ena_data)) ) ) ) ;;得到块中子图元所属的块的插入点坐标表 (defun get-blockinsert (slst / a lst p an pt) (if slst (progn (setq lst (mapcar '(lambda (x / y) (setq y (entget x)) (list (cdr (assoc 10 y)) (cdr (assoc 50 y)) ) ) (last slst);;套嵌块图元名列表 ) ) (setq lst (reverse lst) p (caar lst) an (cadar lst) pt '(0 0 0) lst (cdr lst) ) (foreach x lst (setq a (+ an (angle '(0 0 0) (car x))) pt (polar pt a (distance '(0 0 0) (car x))) an (+ an (cadr x)) ) ) (mapcar '+ pt p) ) ) ) 以上子程序的代码是caoyin大哥,给的,程序很好用, 上面的程序是用nentsel点中一个块后,自动生成所点块中图元在原位置,现在我发现两个一个问题在上面, 1、nentsel中的不是标注尺寸中的线(包括直线或多段线)都很正常,而如果是点中是尺寸中线(包括直线或多段线)的话这一步 (command "move" (entlast) "" (list 0 0 0) binsert)是不用移动的,这样就 会刚刚在块的原位置,,所以请caoyin大哥,帮我看判别一下,如果是用nentsel点中是尺寸标注内部的线的话,是有什么标记的,这样我就知道不要执行这一步 (command "move" (entlast) "" (list 0 0 0) binsert)啦 2、caoyin大哥,我发现如果点中是块中的二维多段线的话,怎么用(entmake (entget (car lst)))生成不了呀,有什么办法可以让它生成呀 d 问题1:你可以修改下面部分,红色是得到的 dxf ,判断组码0 (setq lst (mapcar '(lambda (x / y) (setq y (entget x)) (list (cdr (assoc 10 y)) (cdr (assoc 50 y)) ) ) (last slst);;套嵌块图元名列表 ) ) 问题2: 注意块中的坐标是 ocs,而entmake需要的是 wcs d 不行呀,组码0都是insert,怎么没法判断,是不是尺寸标注的对象来的, 现附上dwg图帮我看下,问题在dwg图中注明啦 该文件为 autocad d caoyin版主,帮帮我呀,我的程序就差这一步我其他的我都有思路啦,我不想放弃这个程序呀, d 块中的标注对象其实是一个 “*d”开头的块,你只要判断块名就可以了 d 谢谢caoyin版主,又解决了一个问题,yes............ |
| 所有的时间均为北京时间。 现在的时间是 03:55 PM. |