lisp获得矩形框的尺寸出错
下边的程序是论坛里翻到的,为什么我运行出错呢,或者大侠们有更简便的代码更好了,谢谢啊; 错误: ActiveX 服务器返回错误: 未知名称: Name
(defun c:bl()
(setq en (car(entsel"请选择矩形块图形:")))
(bl en)
)
(defun bl (en / BLKOBJ BLKS LENG NA PTLIST WID)
(if en
(progn
(setq blks (vla-get-blocks
(vla-get-activedocument (vlax-get-acad-object))
)
)
(setq na (vla-get-name (vlax-ename->vla-object en)))
(setq blkobj (vla-item blks na))
(vlax-for obj blkobj
(if (= (read (vla-get-objectname obj)) 'AcDbPolyLine)
(progn
(setq en (vlax-vla-object->ename obj))
(foreach n (entget en)
(if (= (car n) 10)
(setq ptlist (cons (cdr n) ptlist))
)
)
);此括号也可(vlax-safearray->list(vlax-variant-value(vla-get-coordinates obj))), 但此结果得出的是个表,需要转换成点列表.
)
)
(if ptlist
(progn
(setq leng (distance (car ptlist) (cadr ptlist)))
(setq wid (distance (cadr ptlist) (caddr ptlist)))
(if (> leng wid)
(prompt
(strcat "矩形长度为:" (rtos leng) "宽度为:" (rtos wid))
)
(prompt
(strcat "矩形长度为:" (rtos wid) "宽度为:" (rtos leng))
)
)
)
)
(princ)
)
)
)
请选择矩形块图形
我想你出问题关键在这句。。。
一般的 使用vl函数在前面加载(vl-load-com),防止com组件没有加载而出错。 本帖最后由 llsheng_73 于 2014-1-14 10:37 编辑
严格的说楼主这个程序它不一定能真正返回矩形框的长和宽,估计把随便一个多于2个顶点的AcDbPolyLine做成块,它都会把第一边长当成矩形的长而把第二边长当成宽,它不会去管那个图形是不是矩形甚至不会管它有没有4条边,更不会管长是不是小于宽
而程序不能运行应该是因为少了(VL-LOAD-COM)
页:
[1]