明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3908|回复: 6

[基础] 提示:VLAX-GET-ACAD-OBJECT 没有定义

[复制链接]
发表于 2010-12-28 10:32:55 | 显示全部楼层 |阅读模式
(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
有没有高手知道是什么原因?
发表于 2010-12-28 10:54:37 | 显示全部楼层

  1. (defun c:kk()
  2.      (setq num 0);统计一条多断线端点数
  3.         (setq m 0);统计多段线条数
  4.         (setq file (open "d:\\pline.txt" "w"))
  5.         (princ "\n" file)
  6.         (setq area 0)
  7. (vl-load-com)
  8. (setq myacad(vlax-get-acad-object))
  9. (setq mydoc(vla-get-ActiveDocument myacad))
  10. (setq myms(vla-get-ModelSpace mydoc))
  11.         (setq ii 0)
  12.         (setq idid 0)
  13.           ;;;用vlax-for循环
  14.           (vlax-for my myms
  15.             (setq e (vlax-vla-object->ename my)
  16.                   e1 (entget e))
  17.                (if(= "LWPOLYLINE" (cdr(assoc 0 e1)))
  18.   (progn
  19.         
  20.                    (setq m (+ 1 m))
  21.                    (setq num 0)
  22.                    (setq area(vlax-get-property my 'Area));获取面积
  23.                    ;(setq len (vlax-get-property my 'Length));获取周长
  24.                    (setq lay (vlax-get-property my 'Layer));获取图层         
  25.    
  26.                                  (if(> area 1.0);;面积大小要求
  27.                (progn
  28.           (setq idid (+ 1 idid));;图版个数统计,可用于图版的编号
  29.             (while (nth i e1);按顺序每次取出图元表中的一个点对
  30.                                        
  31.                 (setq n (car(nth i e1)))
  32.                    (if(= n 10)    ;判断点对表是否记录的是坐标
  33.                        (progn
  34.           (setq num (+ 1 num))
  35.                  
  36.                  (setq x(cadr(nth i e1)))
  37.                   (setq y(caddr(nth i e1)))
  38.                   (setq xx (rtos x 2 3));2表示输出为十进制 3表示精度为3位
  39.                         (setq yy (rtos y 2 3))
  40.           (setq num1 (rtos num 2 0))
  41.                  (setq m1 (rtos m 2 0))
  42.                  (setq area1 (rtos area 2 3))
  43.                  (setq idid1 (rtos idid 2 0))
  44.                  ;;(princ ( strcat m1 "     "num1 "     "xx "     " yy "     " area1"     " lay "\n") file);文件输出
  45.                  (princ ( strcat idid1 "     "num1 "     "yy "     " xx "     " area1"     " lay "\n") file);文件输出
  46.                
  47.                        )
  48.                    )
  49.                       (setq i (+ 1 i))
  50.             )
  51.                                     )
  52.                                 )
  53.             
  54.      
  55.    
  56.    )
  57.   )
  58.          (setq e (entnext e))
  59.          )
  60.   
  61.       (close file)
  62. )
发表于 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 属性
发表于 2013-9-21 11:04:57 | 显示全部楼层
参数类型错误: VLA 对象集合: #<VLA-OBJECT 0b741f74>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-26 06:46 , Processed in 0.156265 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表