kalai 发表于 2022-7-6 22:30:25

selectAtpoint方法

你好
 
SelectAtpoint不起作用。
 
有人能指出错误吗
 
 


Dim tpt1(0 To 2) As Double

ftype(0) = 0
fdata(0) = "LINE"
ftype(1) = -4
fdata(1) = "<OR"
ftype(2) = 8
fdata(2) = "LAYER1"
ftype(3) = 8
fdata(3) = "LAYER2"
ftype(4) = -4
fdata(4) = "OR>"

qset.SelectAtPoint tpt1, ftype, fdata

 
未选择任何对象。

MSasu 发表于 2022-7-6 22:45:02

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

kalai 发表于 2022-7-6 22:55:00

我尝试过不使用过滤器,对象seelcted不属于层“Layer1”或“layer2”
拾取框的增加不起作用。
 
宣言:
dim qset作为acadselectionset
设置qset=thisdrawing。选择集。添加(“qsetname”)

Joro-- 发表于 2022-7-6 23:04:23

卡莱,
 
我不知道你的代码中哪里有问题,但我写了几行,似乎没有问题。我正在发布我的代码,希望它能帮助你
 

Sub TrySelectAtPoint()
   On Error Resume Next
   Dim ss As AcadSelectionSet
   ThisDrawing.SelectionSets("MySS").Delete
   If Err Then
       Err.Clear
   End If
   ThisDrawing.SelectionSets.Add "MySS"
   Set ss = ThisDrawing.SelectionSets("MySS")
   
   Dim selPt(2) As Double
       selPt(0) = 0
       selPt(1) = 0
       selPt(2) = 0
   
   MsgBox ss.Count & " BEFORE selecting"
   
   ss.SelectAtPoint selPt
   
   MsgBox ss.Count & " AFTER selecting"
   Line.sel
End Sub

kalai 发表于 2022-7-6 23:06:40

感谢您的回复,
 
但此(selectatPoint)方法仅选择一个对象。

Joro-- 发表于 2022-7-6 23:15:42

是-只选择了一个对象,因为这只是一个基本示例,可以向您展示此功能的工作原理。如果你表现出色。使用不同的点多次选择点。更多对象将添加到选择集。有两点:
 

Sub TrySelectAtPoint()
   On Error Resume Next
   Dim ss As AcadSelectionSet
   ThisDrawing.SelectionSets("MySS").Delete
   If Err Then
       Err.Clear
   End If
   ThisDrawing.SelectionSets.Add "MySS"
   Set ss = ThisDrawing.SelectionSets("MySS")
   
   Dim selPt(2) As Double
       selPt(0) = 0
       selPt(1) = 0
       selPt(2) = 0
   
   MsgBox ss.Count & " BEFORE selecting"
   
   ss.SelectAtPoint selPt
   
       selPt(0) = 100
       selPt(1) = 0
       selPt(2) = 0
      
   ss.SelectAtPoint selPt
   
   MsgBox ss.Count & " AFTER selecting"
   
End Sub

irneb 发表于 2022-7-6 23:28:17

这不是SelectAtPoint应该做的吗?这就好像用户通过拾取图元来选择,即使有1000个图元穿过该点,也只会选择绘制顺序中最顶部的图元。如果需要特定点的拾取框区域内的所有图元,则需要计算与当前缩放因子相关的拾取框尺寸,然后将Select与acSelectionSetCrossing模式和“拾取框”的计算矩形一起使用。

MSasu 发表于 2022-7-6 23:32:08

在我看来,OP的问题在于定义的过滤器不能按预期工作。
页: [1]
查看完整版本: selectAtpoint方法