明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1578|回复: 5

如何多选不同扩展属性的实体

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

 Dim ssetObj As AcadSelectionSet 
    Dim mode As Integer
    Dim gpCode(0) As Integer
    Dim dataValue(0) As Variant
    Dim groupCode As Variant
    Dim dataCode   As Variant
    Dim obj As AcadLWPolyline
   
    On Error Resume Next
    If Not IsNull(ThisDrawing.SelectionSets("SSET")) Then
      Set ssetObj = ThisDrawing.SelectionSets("SSET")
      ssetObj.Delete
    End If
    Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")
   
    mode = acSelectionSetAll
    gpCode(0) = 1000
    groupCode = gpCode
    dataValue(0) = "600601"
    dataCode = dataValue
    ssetObj.Select mode, , , groupCode, dataCode
      If ssetObj.Count <> 0 Then
         For Each obj In ssetObj
           obj.color=acRed
           obj.Update
         Next
      End If
我还有一个扩展属性是600602,即 dataValue(0) = "600602"。如何同时进行选择修改,使600602颜色为其他颜色?

发表于 2008-2-26 13:52:00 | 显示全部楼层
对扩展属性作过滤选择只能通过应用程序名过滤,而不能通过具体属性值过滤选择!
 楼主| 发表于 2008-2-26 14:54:00 | 显示全部楼层
本帖最后由 作者 于 2008-2-26 15:01:19 编辑

Sub b()
    Dim ssetObj As AcadSelectionSet
    Dim Pkobj As AcadEntity
   
    Dim i As Integer
   
    Dim mode As Integer
    Dim xType(0) As Integer
    Dim xData(1) As Variant
   
    Dim xTypeCode As Variant
    Dim xDataCode As Variant
   
    Dim dataValue(0) As Variant
   
    Dim obj As AcadLWPolyline
 
    Dim ObjCode As String

    On Error Resume Next
    If Not IsNull(ThisDrawing.SelectionSets("SSET")) Then
      Set ssetObj = ThisDrawing.SelectionSets("SSET")
      ssetObj.Delete
    End If
    Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")
    
  
    mode = acSelectionSetAll
    xType(0) = 1000
    xData(0) = "600601"
    xData(1) = "600602"
   
    On Error Resume Next
     For i = 0 To 1
         xTypeCode = xType
  
         dataValue(0) = xData(i)
         xDataCode = dataValue
   
         ssetObj.Select mode, , , xTypeCode, xDataCode
 
       For Each Pkobj In ssetObj
         
          ObjCode = xData(i)
         
          Set obj = Pkobj

      If ssetObj.Count =0 Then
        exit  sub
      else          
          Select Case ObjCode
              Case "600601"

                   obj.ConstantWidth = 1

              Case "600602"

                  obj.ConstantWidth = 0.5

          End Select
      End If
        obj.Update
    
        Next
   
      Next
   
     MsgBox "结束!", vbInformation, "提示"
    
  End If
 
End Sub

版主,上面的程序我进行了修改,可是最终运行后的结果是两种实体的ConstantWidth都是0.5,在执行了第一个循环后继续执行第二个循环,然后就会将第一个的运算值变成由第二个值来赋予。如何在执行第一个case循环后再执行第二个case的时候不执行第一个case啊?即第一个的600601的扩展属性的实体的ConstantWidth不会再变化呢?

发表于 2008-2-26 15:31:00 | 显示全部楼层

你这样作选择集是不能得到预期的结果的:

ssetObj.Select mode, , , xTypeCode, xDataCode

对于扩展属性只能通过应用程序名作选择集!!

 楼主| 发表于 2008-2-26 17:14:00 | 显示全部楼层

对于扩展属性只能通过应用程序名作选择集这句话我不理解。不过,我已经弄好啦,还是谢谢版主。

发表于 2008-2-26 21:13:00 | 显示全部楼层

优化多段线外,扩展属性只能用1001码过滤

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

本版积分规则

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

GMT+8, 2024-11-26 11:35 , Processed in 0.174377 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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