匡匡 发表于 2010-12-28 10:32:55

提示:VLAX-GET-ACAD-OBJECT 没有定义

(defun c:kk()
(setq e (entnext));获取cad文件中的图元名称
      (setq num 0);统计一条多断线端点数
      (setq m 0);统计多段线条数
      (setq file (open "d:\\pline.txt" "w"))
      (princ "\n" file)
      (setq area 0)
(vl-load-com)
(setq myacad(vlax-get-acad-object))
(setq mydoc(vla-get-ActiveDocument myacad))
(setq myms(vla-get-ModelSpace mydoc))
      (setq ii 0)
      (setq idid 0)

      (while e
      
      (setq my (vla-item myms ii));获取图元对象
      (setq ii (+ 1 ii))
   
      (setq i 0)
      (setq e1(entget e));由图元名e获取图元表
               (if(= "LWPOLYLINE" (cdr(assoc 0 e1)))
(progn
      
                   (setq m (+ 1 m))
                   (setq num 0)
                   (setq area(vlax-get-property my 'Area));获取面积
                   ;(setq len (vlax-get-property my 'Length));获取周长
                   (setq lay (vlax-get-property my 'Layer));获取图层         
   
                                 (if(> area 1.0);;面积大小要求
               (progn
          (setq idid (+ 1 idid));;图版个数统计,可用于图版的编号
            (while (nth i e1);按顺序每次取出图元表中的一个点对
                                       
                (setq n (car(nth i e1)))
                   (if(= n 10)    ;判断点对表是否记录的是坐标
                     (progn
          (setq num (+ 1 num))
               
               (setq x(cadr(nth i e1)))
                  (setq y(caddr(nth i e1)))
                  (setq xx (rtos x 2 3));2表示输出为十进制 3表示精度为3位
                        (setq yy (rtos y 2 3))
          (setq num1 (rtos num 2 0))
               (setq m1 (rtos m 2 0))
               (setq area1 (rtos area 2 3))
               (setq idid1 (rtos idid 2 0))
               ;;(princ ( strcat m1 "   "num1 "   "xx "   " yy "   " area1"   " lay "\n") file);文件输出
               (princ ( strcat idid1 "   "num1 "   "yy "   " xx "   " area1"   " lay "\n") file);文件输出
               
                     )
                   )
                      (setq i (+ 1 i))
            )
                                    )
                              )
            
   
   
   )
)
         (setq e (entnext e))
         )

      (close file)
)


这是一个读取AutoCAD中多边形数据的程序,但是在读取CAD中有很多图形(图元很多)的时候,会出错:
; 错误: no function definition: VLAX-GET-ACAD-OBJECT
有没有高手知道是什么原因?

Gu_xl 发表于 2010-12-28 10:54:37


(defun c:kk()
   (setq num 0);统计一条多断线端点数
      (setq m 0);统计多段线条数
      (setq file (open "d:\\pline.txt" "w"))
      (princ "\n" file)
      (setq area 0)
(vl-load-com)
(setq myacad(vlax-get-acad-object))
(setq mydoc(vla-get-ActiveDocument myacad))
(setq myms(vla-get-ModelSpace mydoc))
      (setq ii 0)
      (setq idid 0)
          ;;;用vlax-for循环
          (vlax-for my myms
          (setq e (vlax-vla-object->ename my)
                  e1 (entget e))
               (if(= "LWPOLYLINE" (cdr(assoc 0 e1)))
(progn
      
                   (setq m (+ 1 m))
                   (setq num 0)
                   (setq area(vlax-get-property my 'Area));获取面积
                   ;(setq len (vlax-get-property my 'Length));获取周长
                   (setq lay (vlax-get-property my 'Layer));获取图层         
   
                                 (if(> area 1.0);;面积大小要求
               (progn
          (setq idid (+ 1 idid));;图版个数统计,可用于图版的编号
            (while (nth i e1);按顺序每次取出图元表中的一个点对
                                       
                (setq n (car(nth i e1)))
                   (if(= n 10)    ;判断点对表是否记录的是坐标
                     (progn
          (setq num (+ 1 num))
               
               (setq x(cadr(nth i e1)))
                  (setq y(caddr(nth i e1)))
                  (setq xx (rtos x 2 3));2表示输出为十进制 3表示精度为3位
                        (setq yy (rtos y 2 3))
          (setq num1 (rtos num 2 0))
               (setq m1 (rtos m 2 0))
               (setq area1 (rtos area 2 3))
               (setq idid1 (rtos idid 2 0))
               ;;(princ ( strcat m1 "   "num1 "   "xx "   " yy "   " area1"   " lay "\n") file);文件输出
               (princ ( strcat idid1 "   "num1 "   "yy "   " xx "   " area1"   " lay "\n") file);文件输出
               
                     )
                   )
                      (setq i (+ 1 i))
            )
                                    )
                              )
            
   
   
   )
)
         (setq e (entnext e))
         )

      (close file)
)

e2002 发表于 2010-12-28 12:02:26

(vl-load-com) 先

匡匡 发表于 2010-12-28 14:13:35

(vl-load-com)已经有了

匡匡 发表于 2010-12-28 14:25:01

有的时候还会提示错误:
; 错误: ActiveX 服务器返回错误: 未知名称: AREA

就一小卒 发表于 2010-12-28 17:44:33

回复 匡匡 的帖子

有的图元没有AREA 属性

yqg1958 发表于 2013-9-21 11:04:57

参数类型错误: VLA 对象集合: #<VLA-OBJECT 0b741f74>
页: [1]
查看完整版本: 提示:VLAX-GET-ACAD-OBJECT 没有定义