提取所有坐标和尺寸
我想从AutoCAD图形(附件)中提取所有坐标和尺寸我正在使用下面的代码,他们只提取圆维度,我可以做什么来提取其他维度。。
(vl load com)
(定义c:测试(/即p1 p2 ss lst q var f fn dat dat dat1)
;HANHPCHUC 2014
(设置“var(getvar”cmdecho))
(setvar'cmdecho 0)
(如果(和(setq e(entsel“\n请选择实体…))(setq e(car e))(=(cdr(assoc 0(entget e)))“3DSOLID”))
(progn(vla GetBoundingBox(setq obj(vlax ename->vla object e))‘p1’p2)
(地图车“”((a b)(设置a(vlax safearray->列表b))'(p1 p2)(列表p1 p2))
(命令“_explode”e)
(setq i 0
ss(ssget“C”p1 p2)
lst(mapcar’(λ(x))
(setq q nil)
(如果
(=(cdr(assoc 0(entget x)))“区域”)
(setq q(cons(LM:reg x)q))
(setq q q(cons(vlax ename->vla object x)q))
)
(如果
(列表q)
(LM:展平q)
q
)
)
(vl remove if“listp(mapcar”cadr(ssnamex ss)))
) ;_ mapcar结束
) ;_ setq结束
(foreach o(vl remove if not“”((x)(=(vla get ObjectName x)“AcDbCircle”))(LM:展平lst)
(setq dat(cons(princ(strcat“\nCIRCLE_”(itoa(setq i(1+i))))”)
(vl princ到字符串
(mapcar“”((x)(vlax get o x))'(半径中心))
)))
dat)
) ;_ foreach结束
(命令“_.U”)
(setq fn(strcat(getvar“dwgprefix”)“hole dat.csv”)f(open fn“w”))
; 如果您不想覆盖文件,请按照Marko@post#14的建议附加use(open fn“a”)
(foreach)$
(foreach x dat
(setq dat1(cons(vl字符串转换
" "
","
(vl列表->字符串
(vl remove if“”((a)(或(=a 10)(=a 40)(=a 41))(vl字符串->列表x))
) ;_ vl列表结束->字符串
) ;_ vl字符串翻译结束
日期1
) ;_ cons结束
) ;_ setq结束
) ;_ foreach结束
(写入第$f行)
(写入行“f”)
(如果f(关闭f))
(startapp“notepad”fn);
) ;_ 程序结束
) ;_ if结束
(setvar'cmdecho var)
(普林斯)
) ;_ defun结束
;;;http://www.cadtutor.net/forum/showthread.php?35506-如何获取区域坐标/第2页
;;;作为子功能采用
(定义LM:reg(reg/RetObj)
(setq Reg(vlax ename->vla对象Reg))
(如果(vlax-method-applicable-p reg’explode)
(程序
(setq RetObj(vlax safearray->list(vlax variant value(vla explode Reg)))
(重复(长度RetObj)
(if(eq“AcDbRegion”(vla get ObjectName(car RetObj)))
(setq RetObj(append RetObj(vlax safearray->list(vlax variant value(vla explode(car RetObj Ю)Ю))))
(setq RetObj(append RetObj(list(car RetObj)))
) ;_ if结束
(setq RetObj(cdr RetObj))
) ;_ 重复结束
)
)
雷托布
) ;_ defun结束
;; 展平列表-Lee Mac
;; 将嵌套列表转换为非嵌套列表
;; http://www.lee-mac.com/flatten.html
(定义LM:展平(l)
(if(原子l)
(列表l)
(附加(LM:展平(car l))(if(cdr l)(LM:展平(cdr l)))
)
)
页:
[1]