hmilye 发表于 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操作,需要用选择集方法。

hmilye 发表于 2008-11-21 21:27:00

只能用selectionset?
我只是想对一个层内的所有直线进行操作,因为要提取直线的属性,所以必须定义成line
有没有什么可以不用用户选择就能都直接操作的办法呢

zzyong00 发表于 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

mccad 发表于 2008-11-22 09:26:00

先定义成AcadEntity,针对每一个对象,先判断对象的.Name属性是不是AcDbLine,再后续的操作。
但还是用选择集好些,虽然对初学者难一些,如果文件大则速度会明显快。

hmilye 发表于 2008-11-22 12:18:00

选择集也不是感觉难,我也做了一个,也测试过了,只不过感觉还要选一下比较麻烦
最后的解决办法是用了一个中间值转换了一下
先定义成entity,然后判断类型是否line,如果是的话赋值给另一个定义成line的变量,就可以了
速度的问题还好,一次性替换了几万个图元,也没花啥时间

mccad 发表于 2008-11-22 12:36:00

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

hmilye 发表于 2008-11-25 15:59:00

谢谢,我再去研究
现在只是任务驱动法,有啥想法再去找解决方案,所以对一般的东西都还没有系统了解
页: [1]
查看完整版本: [求助]访问直线对象的问题