乐筑天下

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

[编程交流] selectAtpoint方法

[复制链接]

26

主题

67

帖子

41

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-6 22:30:25 | 显示全部楼层 |阅读模式
你好
 
SelectAtpoint不起作用。
 
有人能指出错误吗
 
 
  1. Dim tpt1(0 To 2) As Double
  2. ftype(0) = 0
  3. fdata(0) = "LINE"
  4. ftype(1) = -4
  5. fdata(1) = "<OR"
  6. ftype(2) = 8
  7. fdata(2) = "LAYER1"
  8. ftype(3) = 8
  9. fdata(3) = "LAYER2"
  10. ftype(4) = -4
  11. fdata(4) = "OR>"
  12. qset.SelectAtPoint tpt1, ftype, fdata

 
未选择任何对象。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 22:45:02 | 显示全部楼层
我现在无法使用VBA访问AutoCAD,而且已经有一段时间没有使用它了。所以,在有这方面经验的人看到这条线索之前,我会做一些猜测:
选择集对象是否正确声明和注册?你试过没有过滤器的选择吗?用于选择的点是否在屏幕上可见?这个问题是否与当前缩放级别相关的拾取框大小有关?
回复

使用道具 举报

26

主题

67

帖子

41

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-6 22:55:00 | 显示全部楼层
我尝试过不使用过滤器,对象seelcted不属于层“Layer1”或“layer2”
拾取框的增加不起作用。
 
宣言:
dim qset作为acadselectionset
设置qset=thisdrawing。选择集。添加(“qsetname”)
回复

使用道具 举报

9

主题

59

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2022-7-6 23:04:23 | 显示全部楼层
卡莱,
 
我不知道你的代码中哪里有问题,但我写了几行,似乎没有问题。我正在发布我的代码,希望它能帮助你
 
  1. Sub TrySelectAtPoint()
  2.    On Error Resume Next
  3.    Dim ss As AcadSelectionSet
  4.    ThisDrawing.SelectionSets("MySS").Delete
  5.    If Err Then
  6.        Err.Clear
  7.    End If
  8.    ThisDrawing.SelectionSets.Add "MySS"
  9.    Set ss = ThisDrawing.SelectionSets("MySS")
  10.    
  11.    Dim selPt(2) As Double
  12.        selPt(0) = 0
  13.        selPt(1) = 0
  14.        selPt(2) = 0
  15.    
  16.    MsgBox ss.Count & " BEFORE selecting"
  17.    
  18.    ss.SelectAtPoint selPt
  19.    
  20.    MsgBox ss.Count & " AFTER selecting"
  21.    Line.sel
  22. End Sub
回复

使用道具 举报

26

主题

67

帖子

41

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-6 23:06:40 | 显示全部楼层
感谢您的回复,
 
但此(selectatPoint)方法仅选择一个对象。
回复

使用道具 举报

9

主题

59

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2022-7-6 23:15:42 | 显示全部楼层
是-只选择了一个对象,因为这只是一个基本示例,可以向您展示此功能的工作原理。如果你表现出色。使用不同的点多次选择点。更多对象将添加到选择集。有两点:
 
  1. Sub TrySelectAtPoint()
  2.    On Error Resume Next
  3.    Dim ss As AcadSelectionSet
  4.    ThisDrawing.SelectionSets("MySS").Delete
  5.    If Err Then
  6.        Err.Clear
  7.    End If
  8.    ThisDrawing.SelectionSets.Add "MySS"
  9.    Set ss = ThisDrawing.SelectionSets("MySS")
  10.    
  11.    Dim selPt(2) As Double
  12.        selPt(0) = 0
  13.        selPt(1) = 0
  14.        selPt(2) = 0
  15.    
  16.    MsgBox ss.Count & " BEFORE selecting"
  17.    
  18.    ss.SelectAtPoint selPt
  19.    
  20.        selPt(0) = 100
  21.        selPt(1) = 0
  22.        selPt(2) = 0
  23.       
  24.    ss.SelectAtPoint selPt
  25.    
  26.    MsgBox ss.Count & " AFTER selecting"
  27.    
  28. End Sub
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 23:28:17 | 显示全部楼层
这不是SelectAtPoint应该做的吗?这就好像用户通过拾取图元来选择,即使有1000个图元穿过该点,也只会选择绘制顺序中最顶部的图元。如果需要特定点的拾取框区域内的所有图元,则需要计算与当前缩放因子相关的拾取框尺寸,然后将Select与acSelectionSetCrossing模式和“拾取框”的计算矩形一起使用。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 23:32:08 | 显示全部楼层
在我看来,OP的问题在于定义的过滤器不能按预期工作。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 11:10 , Processed in 0.728335 second(s), 68 queries .

© 2020-2025 乐筑天下

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