明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1343|回复: 7

[求助]访问直线对象的问题

[复制链接]
发表于 2008-11-21 15:11:00 | 显示全部楼层 |阅读模式

假设在过程中

Dim SpanLine As AcadLine

但是在运行下面语句时,会遇到类型不匹配错误

For Each SpanLine In ThisDrawing.ModelSpace

如果定义成AcadEntity,则可以运行过去

cad为2009.

我在一本书上看到过完全相同的例子,是定义成acadline的,不知道到底能不能这样

如果不能,应该如何解决访问的问题?谢谢了

发表于 2008-11-21 21:16:00 | 显示全部楼层

For Each XX In ThisDrawing.ModelSpace是对ModelSpace空间进行for each操作。

Dim SpanLine As AcadLine这是对CAD线进行定义

在ModelSpace中要对Line操作,需要用选择集方法。

 楼主| 发表于 2008-11-21 21:27:00 | 显示全部楼层
只能用selectionset?
我只是想对一个层内的所有直线进行操作,因为要提取直线的属性,所以必须定义成line
有没有什么可以不用用户选择就能都直接操作的办法呢
发表于 2008-11-22 00:55:00 | 显示全部楼层
Dim i As Integer
For i = 0 To ThisDrawing.ModelSpace.Count - 1
    Debug.Print ThisDrawing.ModelSpace.Item(i).Layer
Next
发表于 2008-11-22 09:26:00 | 显示全部楼层

先定义成AcadEntity,针对每一个对象,先判断对象的.Name属性是不是AcDbLine,再后续的操作。

但还是用选择集好些,虽然对初学者难一些,如果文件大则速度会明显快。

 楼主| 发表于 2008-11-22 12:18:00 | 显示全部楼层
选择集也不是感觉难,我也做了一个,也测试过了,只不过感觉还要选一下比较麻烦
最后的解决办法是用了一个中间值转换了一下
先定义成entity,然后判断类型是否line,如果是的话赋值给另一个定义成line的变量,就可以了

速度的问题还好,一次性替换了几万个图元,也没花啥时间

发表于 2008-11-22 12:36:00 | 显示全部楼层

选择集并不需要点一下,使用SelectSet.Select方法中的acSelectionSetAll模式再加上过滤器过滤直线就可以。

 楼主| 发表于 2008-11-25 15:59:00 | 显示全部楼层

谢谢,我再去研究

现在只是任务驱动法,有啥想法再去找解决方案,所以对一般的东西都还没有系统了解

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

本版积分规则

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

GMT+8, 2024-11-26 06:18 , Processed in 0.174363 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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