乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 99|回复: 5

真彩色滤光器

[复制链接]

9

主题

15

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
51
发表于 2008-4-21 02:04:10 | 显示全部楼层 |阅读模式
我想选择几个相同的ACI颜色实体,然后显示抓地力。
在绘图...
一些实体颜色=255,194,10(True Color)
一些实体颜色=40(ACI颜色)
所有这些实体都是相同的ACI颜色40(但我想过滤True Color实体)
我正在尝试遵循代码...因为它似乎是DXF组过滤器不支持True Color
Sub ColorFilter()
Dim对象SelSet As AcadSelectionSet
On Error Resume Next
ThisDrawing.SelectionSets("sset")。删除
在错误转到错误这里
设置目标SelSet=ThisDrawing.SelectionSets.Add("sset")
Dim intGcode(0)As intger
Dim varCodeData(0)As Variant
intGcode(0)=62
varCodeData(0)="40"
objSelSet.SelectacSelectionSetAll,, intGcode, varCodeData
Dim lngMax As Long
Dim lngCnt As Long
Dim obRemove(0)As AcadEntity
lngMax=objSelSet.Count
For lngCnt=0 To lngMax-1
对象集删除(0)=objSelSet.Item(lngCnt)
如果对象删除(0)。TrueColor.ColorMethod=acColorodByRGB然后
objSelSet.RemoveItems对象删除
结束如果
下一步
"_P"&Chr(34) & ")) "
Exit Sub
错误这里:
如果错误那么
Err.Clear
MsgBoxErr.Description
结束如果
结束Sub
'----------------------------
但是,它不起作用
我试图http://discussion.autodesk.com/thread.jspa?messageID=415583使用VLAX而不是上面的SendCommand...
也以失败告终。
有什么办法吗?或任何想法?

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-4-21 10:55:43 | 显示全部楼层
255,194,10=20对我来说
回复

使用道具 举报

9

主题

15

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
51
发表于 2008-4-21 20:46:50 | 显示全部楼层
Chobo,
您的代码在迭代SelectionSet时从SelectionSet中删除对象......这是禁忌。此外,您在报告错误之前清除了错误处理程序中的错误,因此它在错误MsgBox中没有显示任何内容。
我认为以下代码符合您的期望。我不喜欢使用SendCommand,但如果不使用VL类,这是我现在唯一能想到的方法。
  1. Option Explicit
  2. Sub ColorFilter()
  3.     Dim objSelSet As AcadSelectionSet
  4.     On Error Resume Next
  5.     ThisDrawing.SelectionSets("sset").Delete
  6.     On Error GoTo ErrHere
  7.    
  8.     Set objSelSet = ThisDrawing.SelectionSets.Add("sset")
  9.     Dim intGcode(0) As Integer
  10.     Dim varCodeData(0) As Variant
  11.     intGcode(0) = 62
  12.     varCodeData(0) = "40"
  13.     objSelSet.Select acSelectionSetAll, , , intGcode, varCodeData
  14.    
  15.     Dim lngMax As Long
  16.     Dim lngCnt As Long
  17.     Dim objRemove() As AcadEntity
  18.     Dim objEnt As AcadEntity
  19.     Dim I As Integer
  20.    
  21.     lngMax = objSelSet.Count
  22.     For lngCnt = 0 To lngMax - 1
  23.         Set objEnt = objSelSet.Item(lngCnt)
  24.         If objEnt.TrueColor.ColorMethod = acColorMethodByRGB Then
  25.             ReDim Preserve objRemove(I)
  26.             Set objRemove(I) = objEnt
  27.             I = 1 + I
  28.         End If
  29.     Next
  30.     objSelSet.RemoveItems objRemove
  31.     If objSelSet.Count > 0 Then
  32.         ThisDrawing.SendCommand "(setq ss (ssadd)) "
  33.         For Each objEnt In objSelSet
  34.             ThisDrawing.SendCommand "(ssadd (handent " & Chr(34) & objEnt.Handle & _
  35.                                      Chr(34) & ") ss) "
  36.         Next
  37.     End If
  38.     ThisDrawing.SendCommand "(sssetfirst nil ss) "
  39.     objSelSet.Delete
  40.     Exit Sub
  41.    
  42. ErrHere:
  43.     If Err Then
  44.         MsgBox Err.Description
  45.         Err.Clear
  46.     End If
  47. End Sub

回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-4-21 23:59:46 | 显示全部楼层
Bryco,用chobo显示的颜色创建4个圆圈,然后在每个圆圈上使用(entget(car(entsel))。DXF 62代码显示除指定30之外的所有代码为40,因此过滤SS(在dxf 62=40上)获得4个中的3个。他们只想要一个特别是ACI颜色40的。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-4-22 01:06:55 | 显示全部楼层
抱歉,我解释得不好..
我的目标是仅选择ACI颜色实体
1。选择实体使用组码“62”(任何ACI颜色以及40)
2。从selectionset中减去真彩色实体,因为组码“62”不支持真彩色。
3。选择开始设置抓地力
非常感谢Jeff_M,Bryco!!
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-4-22 10:11:41 | 显示全部楼层
55194,10=20,我不能再这样了<我是说,我在想什么。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-4 21:56 , Processed in 1.125096 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表