kennethxie 发表于 2004-6-21 14:10:00

请教:在VBA中如何使对象改变图层(补充一下)

谢谢斑竹大人刚才给我的回答,可能我的问题问得不是很清楚。


        我要做的是:把layer1中的所有对象都变成layer3的对象,但layer2中的不变。但是我不知道到底有多少对象,所以没办法改变对象属性啦,只能改变图层属性。类似于autocad脚本:


layer               


lock


layer2


unlock


layer1





select


all


change


p


la


layer3


谢谢!

雪山飞狐_lzh 发表于 2004-6-21 14:19:00

选择集+过滤器,选择一层所有对象


Sub t6()<BR>On Error Resume Next<BR>Dim i As AcadEntity<BR>Dim ft(0) As Integer, fd(0)<BR>Dim ss As AcadSelectionSet<BR>ThisDrawing.SelectionSets("CURRENT").Delete<BR>Set ss = ThisDrawing.ActiveSelectionSet<BR>ft(0) = 8: fd(0) = "Layer1"<BR>ss.Select acSelectionSetAll, , , ft, fd<BR>For Each i In ss<BR>i.Layer = "Layer3"<BR>Next i<BR>ss.Clear<BR>ss.Delete<BR>End Sub<BR>

subtlation 发表于 2004-6-22 08:35:00

如果块引用的图层是layer4,但块引用中包含有layer1的物体,


用选择集选择时块引用内layer1的物体不能被选中。

kennethxie 发表于 2004-6-23 10:09:00

再请问一下,如果要选择两个图层里的对象,并使之加入另一个图层呢?


该怎么写代码?

雪山飞狐_lzh 发表于 2004-6-23 10:11:00

fd(0) = "Layer1,Layer2"


过滤器中用逗号隔开

kennethxie 发表于 2004-6-28 14:19:00

Sub layer500()<BR>               On Error Resume Next<BR>                       Dim i As AcadEntity<BR>                       Dim j As Integer<BR>                       Dim ft(0) As Integer<BR>                       Dim fd1(0 To 1) As String<BR>                       Dim fd(0)<BR>                       Dim ss As AcadSelectionSet<BR>                       <BR>                       ft(0) = 8<BR>                       fd1(0) = "24,10"<BR>                       fd1(1) = "W"<BR>                                               For j = 0 To 1<BR>                                                       fd(0) = fd1(j)<BR>                                                       ThisDrawing.SelectionSets("CURRENT").Delete<BR>                                                       Set ss = ThisDrawing.ActiveSelectionSet<BR>                                                       ss.Select acSelectionSetAll, , , ft, fd               


                                       For Each i In ss<BR>                                                                                       i.Layer = j + 2<BR>                                                       Next i<BR>                                                       ss.Clear<BR>                                                       ss.Delete<BR>                       Next j<BR>End Sub


我想用这个循环来做到10,24层的对象改变到第2层,W层的对象改变到第3层,结果发现10,24层的也变成第3层的了.调试的时候发现当j=1时,选择集把原来已经改为第二层的对象又选择到ss中去了.不知是为什么?谢谢帮我解答!

雪山飞狐_lzh 发表于 2004-6-28 14:47:00

ss.Select acSelectionSetAll, , , ft, fd               


前加入


ss.Clear

efan2000 发表于 2004-6-28 14:48:00

ThisDrawing.SelectionSets("CURRENT").Delete<BR>                                                       Set ss = ThisDrawing.ActiveSelectionSet<BR>                                                       ss.Select acSelectionSetAll, , , ft, fd                        <BR>                                                       ss.Clear<BR>                                                       ss.Delete<BR>应该是这些选择集的操作产生的,删除之后,又设为当前选择集,可能是引用了以前创建的了。


                       Set ss = ThisDrawing.ActiveSelectionSet


                       ss.Clear<BR>                                                       ss.Select acSelectionSetAll, , , ft, fd                        <BR>                                                       <BR>直接这样试试。

kennethxie 发表于 2004-6-28 14:52:00

斑竹能向我介绍一下选择集的方法的用法和作用吗?


能不能介绍一本介绍autocad vba的好书或者好的网站

雪山飞狐_lzh 发表于 2004-6-28 15:02:00

选择集的方法的用法帮助里够明白了
页: [1] 2
查看完整版本: 请教:在VBA中如何使对象改变图层(补充一下)