chobo 发表于 2008-4-21 02:04:10

真彩色滤光片

我想选择几个相同的ACI颜色实体,然后显示夹点
在绘图上…
一些图元颜色=255194,10(真彩色)
一些实体颜色=40(ACI颜色)
所有这些图元都是相同的ACI颜色40(但我想过滤真彩色图元)
我尝试以下代码..因为它似乎是DXF组过滤器不支持真彩色 Dim objSelSet As AcadSelectionSet 出错时继续下一步 此绘图。选择集(“sset”)。删除 出错时转到错误处&nbsp
 设置objSelSet=ThisDrawing.SelectionSets。添加(“sset”)
 Dim intGcode(0)作为整数 Dim varCodeData(0)作为变量 intGcode(0)=62 varCodeData(0)=“0”;40“
 对象集。选择acSelectionSetAll、intGcode、varCodeData&nbsp
 Dim lngMax(长) 长时变暗 Dim objRemove(0)作为AcadEntity lngMax=对象集。计数 对于lngCnt=0到lngMax-1&nbsp&nbsp Set objRemove(0)=objSelSet。项目(lngCnt)&nbsp&nbsp 如果objRemove(0)。TrueColor。ColorMethod=acColorMethodByRGB,然后&nbsp&nbsp&nbsp&nbsp 对象集。RemoveItems objRemove&nbsp&nbsp 如果结束 下一步 对象集。删除 此图纸。SendCommand“;(sssetfirst nil(ssget&Chr(34)&&引用_P“&Chr(34)&amp"))&引用
 退出Sub&nbsp
错误: 如果出现错误,则&nbsp&nbsp 犯错误清除&nbsp&nbsp MsgBox错误。说明 结束If结束Sub&039----------------------------
但是,它不起作用,我正在努力http://discussion.autodesk.com/thread.jspa?messageID=415583如果使用VLAX而不是上面的SendCommand,也会失败
有什么办法吗?或者有什么想法?

Bryco 发表于 2008-4-21 10:55:43

255、194、10=我20个

chobo 发表于 2008-4-21 20:46:50

Bryco,这是我的例子。画相似的颜色或不同的颜色实体并测试它
我的目标是最后的选择集->选择实体并设置夹点

Bryco 发表于 2008-4-21 23:59:46

你想做的只是在vba中不好,net会很好。

Jeff_M 发表于 2008-4-22 01:06:55

Chobo,
您的代码在迭代选择集时从选择集中删除对象……这是不允许的。此外,在报告错误之前,您清除了错误处理程序中的错误,因此错误MsgBox中没有显示任何内容
我认为下面的代码实现了您的期望。我不知道't喜欢使用SendCommand,但不去VL类,它'这是我现在唯一能想到的办法
Option Explicit
Sub ColorFilter()
    Dim objSelSet As AcadSelectionSet
    On Error Resume Next
    ThisDrawing.SelectionSets("sset").Delete
    On Error GoTo ErrHere
   
    Set objSelSet = ThisDrawing.SelectionSets.Add("sset")
    Dim intGcode(0) As Integer
    Dim varCodeData(0) As Variant
    intGcode(0) = 62
    varCodeData(0) = "40"
    objSelSet.Select acSelectionSetAll, , , intGcode, varCodeData
   
    Dim lngMax As Long
    Dim lngCnt As Long
    Dim objRemove() As AcadEntity
    Dim objEnt As AcadEntity
    Dim I As Integer
   
    lngMax = objSelSet.Count
    For lngCnt = 0 To lngMax - 1
      Set objEnt = objSelSet.Item(lngCnt)
      If objEnt.TrueColor.ColorMethod = acColorMethodByRGB Then
            ReDim Preserve objRemove(I)
            Set objRemove(I) = objEnt
            I = 1 + I
      End If
    Next
    objSelSet.RemoveItems objRemove
    If objSelSet.Count > 0 Then
      ThisDrawing.SendCommand "(setq ss (ssadd)) "
      For Each objEnt In objSelSet
            ThisDrawing.SendCommand "(ssadd (handent " & Chr(34) & objEnt.Handle & _
                                     Chr(34) & ") ss) "
      Next
    End If
    ThisDrawing.SendCommand "(sssetfirst nil ss) "
    objSelSet.Delete
    Exit Sub
   
ErrHere:
    If Err Then
      MsgBox Err.Description
      Err.Clear
    End If
End Sub

Bryco 发表于 2008-4-22 10:11:41

我不知道't完全达到目标
一些实体颜色=255194,10(真彩色)
一些图元颜色=40(ACI颜色)
如果你使用40,那么你赢了't获得255194,10;因为现在是20。所以我想你一定要把每件商品都涂上真的颜色
如果是这种情况,则不需要选择集过滤器
I'我希望杰夫能得到你想要的。

Jeff_M 发表于 2008-4-22 11:45:38

Bryco,用chobo显示的颜色创建4个圆,然后在每个圆上使用(entget(car(entsel)))。DXF 62代码显示除指定的30之外的所有40,因此过滤的SS(在DXF 62=40时)得到4个中的3个。他们只想要一个具体为ACI颜色40的SS。

chobo 发表于 2008-4-22 11:57:09

对不起,我解释得不好。我的目标是只选择ACI颜色实体。选择实体使用组码;62“;(任何ACI颜色以及40)从选择集中减去真彩色实体,因为组码;62“;不支持真彩色。
3.选择设置夹点,非常感谢Jeff\u M,Bryco!!

Bryco 发表于 2008-4-22 23:36:16

55、194、10=20,我可以#039;不要让这种情况再次发生
我在喝什么,我是说在想什么。
页: [1]
查看完整版本: 真彩色滤光片