明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2100|回复: 6

[基础] [求助]访问图形数据库中的pline,求取各个拐点的坐标

[复制链接]
发表于 2010-11-24 14:42:00 | 显示全部楼层 |阅读模式

大家好,请教一个问题。

我在AutoCAD中画了一个多边形。想读取多边形各个拐点的坐标。通过访问图形数据库。

(setq e (entnext))

(while e

  (setq e1 (entget e))

  (if(="LWPOLYLINE " (cdr (assoc 0 e1)))

      (cdr(assoc 10 elist))//10是拐点坐标,这里只能返回一个多边形一个点的值,怎么才能返回所有点的值呢?而且每个点的坐标标志都是“10”啊?

  )

)

发表于 2010-11-24 16:16:00 | 显示全部楼层

用 nth函数 依次返回e1表的元素,在用car函数返回首元素,在判断是否以10开头的就可以了啊

 

 楼主| 发表于 2010-11-24 16:33:00 | 显示全部楼层

谢谢了。如果我使用Activex,如下面:

(setq myacad(vlax-get-acad-object))
(setq mydoc(vla-get-ActiveDocument myacad))
(setq myms(vla-get-ModelSpace mydoc))
(setq my (vla-item myms 0))
(vlax-dump-object my t)

 

 

出现以下信息:

; IAcadLWPolyline: AutoCAD Lightweight Polyline 接口
;特性值:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00c2eb8c>
;   Area (RO) = 8950.36
;   Closed = -1
;   ConstantWidth = 0.0
;   Coordinate = ...不显示带索引的内容...
;   Coordinates = (809.203 829.272 842.478 849.13 894.903 817.309 ... )
;   Document (RO) = #<VLA-OBJECT IAcadDocument 0747bef4>
;   Elevation = 0.0
;   Handle (RO) = "10B"
;   HasExtensionDictionary (RO) = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 074fcb84>
;   Layer = "图层1"
;   Length (RO) = 616.994
;   Linetype = "ByLayer"
;   LinetypeGeneration = 0
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 2130067480
;   ObjectName (RO) = "AcDbPolyline"
;   OwnerID (RO) = 2130062584
;   PlotStyleName = "ByLayer"
;   Thickness = 0.0
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 074fca20>
;   Visible = -1

 

 

这里面的有坐标信息,;   Coordinates = (809.203 829.272 842.478 849.13 894.903 817.309 ... )
我怎么才能提取出坐标呢?

发表于 2010-11-24 20:48:00 | 显示全部楼层

(setq plst (list))

(if (= (cdr(assoc 0 (setq ent (entget(car(entsel)))))) "LWPOLYLINE")

 (foreach x ent (if (= (car x) 10) (setq plst (cons (cdr x) plst))))

)

发表于 2010-11-24 21:01:00 | 显示全部楼层

(setq entlst (entget (car (entsel))))

 

(vl-remove-if-not '(lambda(x)(= 10 (car x)) ) entlst)

 楼主| 发表于 2010-11-25 08:22:00 | 显示全部楼层

多谢!

发表于 2010-11-25 10:40:00 | 显示全部楼层

如果用vlisp的 话 如下 ((setq b (vlax-ename->vla-object a)) 首先将cad对象转换为VLA对象
(setq point (vlax-safearray->list (vlax-variant-value (vlax-get-property b 'coordinate i))))提取coordinate的属性。i为表的长度 i=0时提取提取第一个元素

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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