明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: dazhangyu

SelectOnScreen的问题

  [复制链接]
发表于 2003-10-31 08:40:00 | 显示全部楼层
请单独试试下面的代码:
Sub SelOnScrLayerPick()
    Dim ssetObj As AcadSelectionSet
    Dim FilterType(0) As Integer
    Dim FilterData(0) As Variant
    Set ssetObj = ThisDrawing.PickfirstSelectionSet
    ssetObj.Clear
    FilterType(0) = 8
    FilterData(0) = "图层1"
    ssetObj.SelectOnScreen FilterType, FilterData
    Debug.Print ssetObj.Count
End Sub
这段代码我在几台机械上试过(2002,2004)均没有问题,证明是正确的;由于手头上没有2000,所以不能确定是否是2000版的原因.
如果在 ssetObj.SelectOnScreen FilterType, FilterData 没有出错,表示你的系统没有问题,如果还是出错,肯定是你的CAD系统的问题,建议卸载重装,若仍不能解决问题建议升级到2002或2004.
 楼主| 发表于 2003-10-31 09:01:00 | 显示全部楼层
该图层既没冻结,也没关闭,而且还是当前图层。
我用ssetobj.select acSelectionSetAll方法试了一下,功能实现了。我现在就更不明白了,为什么这个方法的功能就可以实现,用selectonscreen就出错呢?
我衷心地感谢你们各位版主对我的帮助,真不好意思还得跟你们再讨教。
经过这几次的刀光剑影,dazhangyu更想知道问题出在哪里了!!
各位版主一定要对小弟我帮到底呀,拜托拜托!!
发表于 2003-10-31 11:47:00 | 显示全部楼层
SelectOnScreen需要自己手动在屏幕上选择,如果能够选中,那么会出现高亮状态,同时在命令行上显示选中多少,过滤多少。仔细检查一下是否有选中实体。
 楼主| 发表于 2003-11-3 10:44:00 | 显示全部楼层
没有这些提示信息
是不是我的ACAD2000有问题呀?在哪儿能下载这个软件呢?或更高版本的也行呀
发表于 2003-11-3 16:06:00 | 显示全部楼层
我测试了一下dazhangyu的程序,稍做修改,程序如下:
Sub ce()
    Dim ssetobj As AcadSelectionSet '设置选择对象
    On Error Resume Next
    Set ssetobj = ThisDrawing.SelectionSets.Add("pmbj_sset")
    If Err Then
        Err.Clear
        Set ssetobj = ThisDrawing.SelectionSets.Item("pmbj_sset")
    End If
    ssetobj.Clear
    MsgBox "ssetobj的名字是:" & ssetobj.Name
    MsgBox "当前图层是:" & ThisDrawing.ActiveLayer.Name '当前图层就是pmbj
    Dim stype(0) As Integer
    Dim sdata(0) As Variant
    stype(0) = 8
    sdata(0) = "pmbj"
    ssetobj.SelectOnScreen stype, sdata '当程序执行到这儿时,提示手动选择对象

    ssetobj.Update
     Dim entry As AcadEntity
  For Each entry In ssetobj
   entry.Color = 5
  Next entry
End Sub
我的CAD也是2000 但是没有出现错误啊
我想dazhengyu的意思是不是要求自动选择某个图层的所有实体啊?
如果是这样 我想用selectonscreen 可能不能满足你的要求啊
发表于 2003-11-3 16:13:00 | 显示全部楼层
这样做你看是否能满足你的要求
'***********声明公用变量*************
Public Sset As AcadSelectionSet
'*****************建立选择集***************
Function CreatSSet()     
    Dim ss As AcadSelectionSet
    On Error Resume Next
    Set ss = ThisDrawing.SelectionSets.Add("bluemoon")
    If Err Then
        Err.Clear
        Set ss = ThisDrawing.SelectionSets("bluemoon")
        ss.Clear
    End If
    Set CreatSSet = ss
End Function


'***************得到某图层的所有实体并把其放入选择集中**********
'***************以图层名称作为参数***********
Public Sub GetLayerEntity(NameString As String)
    Dim FType(0) As Integer
    Dim FData(0) As Variant
    FType(0) = 8
    FData(0) = NameString
    Set Sset = CreatSSet
    Sset.Select acSelectionSetAll, , , FType, FData
End Sub
这样就可以把名为NameString的图层中的所有实体放入选择集Sset中 然后你在调用这两个函数就应该能完成你的操作了
只要知道图层名称就可以 不用在手动选择啊
多用函数 好处多多啊
 楼主| 发表于 2003-11-4 11:35:00 | 显示全部楼层
楼上仁兄的高见让我五体投地,我对你的敬仰如滔滔江水,奔流不息。。。。。
啊?都知道哇?那我就不说了
我的目的达到了!
如果各位高手还能忍耐我的恒心的话,如果再给我一次机会 ,那么我想说:为什么15楼的方法不好使,而16楼的方法咋就那么好使呢?
发表于 2003-11-5 10:23:00 | 显示全部楼层
select 方法的功能是“选取对象的同时将对象放入选择集中”
selectonscreen方法的功能是“提示用户从屏幕点选对象”
两者功能不同 效果也就不一样
不知道这是不是你要的答案
仁兄的学习精神让小生佩服万分
 楼主| 发表于 2003-11-5 17:43:00 | 显示全部楼层
谢谢
但是selectonscreen后面带参数的意思不就是自动选取指定图层的所有实体吗?

发表于 2003-11-5 19:26:00 | 显示全部楼层
你还是不明白。
Sset.Select acSelectionSetAll, , , FType, FData
这一句指的是选择图形中所有符合过滤器条件的图元。
而 Sset.SelectOnScreen stype, sdata
指的是让用户选择屏幕上的对象并用过滤器的条件进行过滤。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 12:32 , Processed in 0.170846 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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