dazhangyu 发表于 2003-10-29 11:01:00

SelectOnScreen的问题

我想把某一图层上的所有entity的加入到我定义的一个选择集中,我该怎么办呢?
我试用了以下语句:
       ssetobj.SelectOnScreen 8, “Layler1”
没成功,提示我有错误:Error#-2147467259 ACADProject方法'SelectOnScreen'作用于对象'IAcadSelectionSet'时失败,这是为什么呢?

zeng29 发表于 2003-10-29 11:38:00

Sub SelOnScrLayer()
    Dim ssetobj As AcadSelectionSet
    Dim FilterType(0) As Integer
    Dim FilterData(0) As Variant
   
    On Error Resume Next
    Set ssetobj = ThisDrawing.SelectionSets.Add("a")
    If Err Then
      Err.Clear
      Set ssetobj = ThisDrawing.SelectionSets.Item("a")
    End If
    ssetobj.Clear
    FilterType(0) = 8
    FilterData(0) = "Layler1"
    ssetobj.SelectOnScreen FilterType, FilterData
    Debug.Print ssetobj.Count
    Debug.Print ssetobj.Item(0).ObjectName
End Sub

zeng29 发表于 2003-10-29 11:45:00

ssetobj.SelectOnScreen 后面的参数是数组变量,否则会出错;
有不少的问题贴子,很多情况下是没有仔细查看对象模型中函数的使用规则.

dazhangyu 发表于 2003-10-29 17:27:00

还是不行呀,还是作用在IAcadSelectionSetf对象时失败

mccad 发表于 2003-10-29 18:17:00

程序是正确的,而且在2002及2004中都能正常运行。
你需要看看其它方面的,把你的程序贴出来。

dazhangyu 发表于 2003-10-30 08:55:00

我用的是ACAD2000,这是不是原因呢?

dazhangyu 发表于 2003-10-30 09:00:00

这是我程序中用到SelectOnScreen的那一段:

If (nPaperType = 3) Then

    Dim ssetobj As AcadSelectionSet '设置选择对象
Set ssetobj = ThisDrawing.SelectionSets.Add("pmbj_SSET")
    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'当程序执行到这儿时,就提示出错:作用失败,无法再继续下去,why???

    ssetobj.Update
    point1(0) = BaseX + constLeftWidth
    point1(1) = BaseY - constTopLen
    Dim entry As AcadEntity
 For Each entry In ssetobj
   entry.Color = 5
   entry.Rotate point1, 1.5707962 '旋转90度
entry.Update
    Next entry

End If




efan2000 发表于 2003-10-30 11:44:00

dim ssetobj as acadselectionset '设置选择对象
set ssetobj = thisdrawing.selectionsets.add("pmbj_sset")
ssetobj.clear
 
之前有没有使用 On Error Resume Next,因为不能创建同名的选择集,所以如果名称为pmbj_sset的选择集已经存在。那么set ssetobj = thisdrawing.selectionsets.add("pmbj_sset")这句就发生错误了,后面的当然也都是错的了。

dazhangyu 发表于 2003-10-30 16:32:00

我也用版主zeng29的方法做过,也就是在调用方法selectonscreen之前,加了下面这段语句:
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.count一测试,ssetobj.count=0也就是说选择集中有0个元素
这是为什么?真的无可救要了吗?

efan2000 发表于 2003-10-30 18:37:00

选择时选中的实体有没有出现高亮的状态,选择也跟层的设置状态有关,像冻结之类的可能就不能选择。
页: [1] 2 3
查看完整版本: SelectOnScreen的问题