明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4943|回复: 5

[求助]如何在VB.net开发Autocad时在创建选择集时加入过滤机制

[复制链接]
发表于 2003-1-19 16:31:00 | 显示全部楼层 |阅读模式
看看下面的代码,不知有何错误?总是通不过,请各位大侠帮忙!

     Public AcadApp As AutoCAD.AcadApplication
     Public CurrentDocument As AutoCAD.AcadDocument

     Private Sub Test()
        Try
            AcadApp = GetObject(, "AutoCAD.Application")
        Catch
            AcadApp = CreateObject("AutoCAD.Application")
        Finally
            AcadApp.Visible = True
        End Try
        CurrentDocument = AcadApp.ActiveDocument
        Dim sset As AutoCAD.AcadSelectionSet
        Try
            sset = CurrentDocument.SelectionSets.Item("NewSet")
            sset.Clear()
        Catch
            sset = CurrentDocument.SelectionSets.Add("NewSet")
        End Try
        Dim FilterType(0) As Integer
        Dim FilterData(0) As Object
        FilterType(0) = 0
        FilterData(0) = "Line"
        sset.SelectOnScreen(FilterType, FilterData)
    End Sub
发表于 2003-1-19 18:29:00 | 显示全部楼层

VBA的基本用法

对于一些VBA的基本用法,可能你还不太了解。对于这句Dim FilterData(0) As Object,既然已经声明为对象型的,后面赋值时应该用Set 变量=对象,而你却用了FilterData(0) = "Line",这是对字符型进行赋值,明显错误。
注:过滤机制中也没有用到对象型的数据。
 楼主| 发表于 2003-1-20 20:15:00 | 显示全部楼层

在VB.net中给对象赋值无需使用Set

发表于 2003-10-10 21:54:00 | 显示全部楼层
确实,在VB.Net中,对一些数据类型做了改变,原来的Variant类型已经被Object所取代。而对于数据类型占用的字节数,也发生了变化。如VB6的Integer类型被Short所取代。而VB6的Long类型被Integer所取代。
上例中的Dim FilterType(0) As Integer应更改为Dim FilterType(0) As Short,才符合所占的字节长度。
发表于 2007-4-24 09:39:00 | 显示全部楼层
  1. Sub newselt(ByVal Ptt1 As Object, ByVal Ptt2 As Object)
  2.         myCad.ActiveDocument.Utility.Prompt("请等待...")
  3.         '创建选择集
  4.         On Error GoTo ERROR_HANDLER
  5.         sset = CreateSSet("ss1")
  6.         Dim mode As Integer
  7.         mode = AcSelect.acSelectionSetCrossing
  8.         Dim gpCode(0) As Object
  9.         Dim dataValue(0) As Object
  10.         gpCode(0) = 0
  11.         dataValue(0) = "LINE"
  12.         gpCode(0) = -4
  13.         dataValue(0) = "<Or"
  14.         gpCode(1) = -4
  15.         dataValue(1) = "<And"
  16.         gpCode(2) = 0
  17.         dataValue(2) = "LINE"
  18.         gpCode(3) = -4
  19.         dataValue(3) = "And>"
  1.          gpCode(4) = -4
  2.         dataValue(4) = "<And"
  3.          gpCode(5) = 0
  4.          dataValue(5) = "POLYLINE"
  5.          gpCode(6) = -4
  6.          dataValue(6) = "And>"
复制代码
  1.         gpCode(7) = -4
  2.         dataValue(7) = "<And"
  3.         gpCode(8) = 0
  4.         dataValue(8) = "LWPOLYLINE"
  5.          gpCode(9) = -4
  6.         dataValue(9) = "And>"
复制代码
  1.          gpCode(10) = -4
  2.         'dataValue(10) = "Or>"
复制代码
  1.          Dim groupCode As Object, dataCode As Object
  2.         groupCode = gpCode
  3.         dataCode = dataValue
  4.         sset.Select(mode, Ptt1, Ptt2,groupCode,dataCode)
  5.         MsgBox(sset.Count)
  1.         Exit Sub
  2. ERROR_HANDLER:
  3.         MsgBox("Error In GetIntersectionPoints: " & Err.Number & ", " & Err.Description)
  4.     End Sub
  1. 上述代码中sset.Select(mode, Ptt1, Ptt2,groupCode,dataCode)内后两个参数有问题,如取消就可运行,但没法过滤不要的东西,哪个大侠帮忙,看下有什么问题,急急急………………………………
复制代码
发表于 2011-12-4 23:40:42 | 显示全部楼层
太牛了 就是字节的问题,郁闷了我半天,一下子豁然开朗了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 20:48 , Processed in 0.175477 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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