KoenE 发表于 2022-7-6 22:15:33

直线附近的对象

大家好,
 
经过长时间的搜索,我在这个论坛上的第一篇帖子。。。
 
我正在尝试编写一个VBA例程,它将返回其他对象附近的对象信息。
 
是否有命令或代码可以帮助我识别直线附近的对象?
这些对象并不总是相交,它们也可能是平行的。
 
谢谢

abraxus 发表于 2022-7-6 22:21:20

我不知道除了IntersectWith之外还有什么这样的函数-因此,如果它们不相交,则必须将IntersectWith与额外代码结合起来
 
在直线上定义一个点,然后以编程方式从该点以0度和您想要检测的距离绘制另一条直线
 
然后使用该新线,并使用该线围绕该点每隔5度从原始点创建一个极轴阵列
 
现在,您有了一组线,可以使用IntersectWith函数进行迭代,以检测任何交点
 
希望有帮助
 
编辑:我附上了一个文件,直观地展示了我的想法
与相交。图纸

KoenE 发表于 2022-7-6 22:27:46

所以Abraxus或任何人,
 
我的以下问题:
 
如何将新创建的行加上我试图查找的行添加到我的selectionset中。
因为我需要两个人都喜欢:LineJustCreated。相交(lineToFind,acExtendnone)
 
我的方向对吗?

SEANT 发表于 2022-7-6 22:29:36

可以说物体总是线性的吗?圆、椭圆、样条线实体肯定会使事情复杂化。更不用说多段线和块插入了。
此外,实体是否与WCS共面(即仅处理二维几何)?

KoenE 发表于 2022-7-6 22:37:24

 
嗯,这幅画是2D的,我只是在找线条,所以万岁!
 
只有直线通常是多段线,我只是不明白为什么这会让事情变得复杂。。。

SEANT 发表于 2022-7-6 22:42:53

 
线/线比较只需测试“测试线”到“主线”的两个端点。多段线有更多的端点(顶点)需要测试,以及弧的可能性。

KoenE 发表于 2022-7-6 22:47:27

@肖恩
 
啊,我明白了。
 
可以肯定的是,多段线不是由弧组成的,而且获取多段线的所有顶点及其坐标的功能已经在运行。
 
 
但是现在的问题仍然存在,我不知道如何在另一行的特定范围内选择一行,即使我使用InterectWith,我仍然需要将该行添加到我的选择集。。

SEANT 发表于 2022-7-6 22:49:05

针对“一次芳基”测试点(PT)的替代方法:
通过PrimaryLine得到直线的SlopeVector。希腊字母表的第4个字母创建垂直向量
Dim PerpendicularVector (0 To 2) As Double
PerpendicularVector(0) = - SlopeVector(1)‘note the negative sign
PerpendicularVector(1) =SlopeVector(0)
PerpendicularVector(2) =0.0
然后基于该向量和测试点(PT)创建第二个点
Dim SecondPoint (0 To 2) As Double
SecondPoint(0) = PT(0) + PerpendicularVector(0)
SecondPoint(1) = PT(1) + PerpendicularVector(1)
SecondPoint(2) = PT(2) + PerpendicularVector(2)
然后使用PT和SecondPoint创建一条连接线。最后,使用PrimaryLine和Xline调用intersectWith。如果没有交叉口,可能需要进一步测试。

abraxus 发表于 2022-7-6 22:54:16

今天,我对我的CollisionDetect代码进行了一些调整,使其更快,它也与这个主题相关
 
首先,请记住,试图在直线“附近”查找其他对象会变得非常复杂,因为即使是具有端点的直线也有可变长度,因此在这种情况下,这一切都取决于如何定义“附近”
 
相反,您需要在直线上定义一个点,以便找到“附近”的物体
 
一旦定义了该点(如我几天前的示例所示),就可以根据阈值创建对象的选择集-有点像半径,但由于必须使用“窗口”或“交叉”来选择其附近的任何固定装置,因此它更像是方形半径,而不是圆形半径
 
然后,一旦你有了所有的信息,你迭代通过选择集,并比较一些关于这些实体与给定点,你想找到它“附近”到。。。您可能可以使用边界框根据直线的端点定义选择集x和y的最小值和最大值(这很简单),但请记住,必须处理的选择集越大,所需时间越长
 
请记住,任何运行时间超过2秒的代码都应该有一个进度条表单(循环中有doevents),这样用户就不会认为他们的计算机已经被执行您的代码锁定了

KoenE 发表于 2022-7-6 22:57:16

谢谢abraxus,
 
我目前正在尝试另一种方式来做我想做的事。
 
但同时还要完成一个项目,该项目必须在本周末之前完成。
这是一个遗憾,因为我可以使用这个代码来加快速度,现在我必须用老式的方式工作更长一点。。。
页: [1] 2
查看完整版本: 直线附近的对象