明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1104|回复: 8

[基础] 请Lisp兄弟指导

[复制链接]
发表于 2010-12-10 15:50:27 | 显示全部楼层 |阅读模式
(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)
  
        (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));获取图层         
   
     (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))
             (princ ( strcat m1 "     "num1 "     "xx "     " yy "     " area1"     " lay "\n") file);文件输出
            
               )
            )
       (setq i (+ 1 i))
     )
            
     
   
  )
        (setq e (entnext e))
         )
  
      (close file)
)



这是源代码,功能是把AutoCAD中的多边形坐标、面积、图层数据输出为记事本。
可有的时候出错,有的时候正确,出错提示如下:

命令: kk
; 错误: ActiveX 服务器返回错误: 未知名称: AREA

不知道是为什么?
似乎是     (setq area(vlax-get-property my 'Area));获取面积   有问题
还请指教!


发表于 2010-12-10 16:38:23 | 显示全部楼层
AREA 属性只对Arc, Circle, Ellipse,Hatch, LightweightPolyline, Polyline, Region, Spline
对象有效,对于其他对象自然会出错
 楼主| 发表于 2010-12-10 16:45:12 | 显示全部楼层
我限制了图元是多边形 ,if(= "LWPOLYLINE" (cdr(assoc 0 e1)))
怎么还出错呢
发表于 2010-12-10 16:51:58 | 显示全部楼层
本帖最后由 Andyhon 于 2010-12-10 16:55 编辑

或许得加个 isClosed 属性吧   or (70 . 1)
 楼主| 发表于 2010-12-10 16:57:13 | 显示全部楼层
"LWPOLYLINE"是不是判别Pline的唯一标识呢?
 楼主| 发表于 2010-12-10 17:13:33 | 显示全部楼层
我在cad里面画了一条直线,
(setq e(entnext))(setq elist (entget e))
<图元名: 7ef7a078>
((-1 . <图元名: 7ef7a078>) (0 . "LINE") (330 . <图元名: 7ef62cf8>) (5 . "107") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 93.2074 155.562 0.0) (11 169.829 151.845 0.0) (210 0.0 0.0 1.0))
_$
可是if(= "LWPOLYLINE" (cdr(assoc 0 e1)))怎么还能还能成立
发表于 2010-12-10 22:59:12 | 显示全部楼层
你的if之前少了左括弧。所以判断无效。
 楼主| 发表于 2010-12-11 11:31:54 | 显示全部楼层
多谢!
发表于 2010-12-11 17:51:12 | 显示全部楼层
用选择集选择当前图中的所有多段线,再进行操作不是更快捷吗?
(setq ssa (ssget "x" '((0 . "LWPOLYLINE"))))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 16:22 , Processed in 0.192419 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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