jly0406 发表于 2014-1-10 20:47:24

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)
    )
)
)

edata 发表于 2014-1-10 23:01:59

请选择矩形块图形
我想你出问题关键在这句。。。
一般的 使用vl函数在前面加载(vl-load-com),防止com组件没有加载而出错。

llsheng_73 发表于 2014-1-14 10:35:45

本帖最后由 llsheng_73 于 2014-1-14 10:37 编辑

严格的说楼主这个程序它不一定能真正返回矩形框的长和宽,估计把随便一个多于2个顶点的AcDbPolyLine做成块,它都会把第一边长当成矩形的长而把第二边长当成宽,它不会去管那个图形是不是矩形甚至不会管它有没有4条边,更不会管长是不是小于宽
而程序不能运行应该是因为少了(VL-LOAD-COM)
页: [1]
查看完整版本: lisp获得矩形框的尺寸出错