jakebullet70 发表于 2022-7-6 14:52:39

VBA-从2点获取角度

大家好。(aCad2007)
 
我用这段代码在VBA中获得了2个点。
 
如何获得它们之间的角度?如90度或45度
 
谢谢

jakebullet70 发表于 2022-7-6 14:58:44

也尝试过。。。
 

Dim d As Double
d = ThisDrawing.Utility.AngleFromXAxis(vPoint1,vPoint2)
Debug.Print ThisDrawing.Utility.AngleToString(d, acDegrees, 2)
,但无论vPoint1和2是什么,它都只返回0.00。

SEANT 发表于 2022-7-6 15:08:36

当你说得到两点之间的角度时,你是在暗示有一个共同的顶点吗?也许是世界起源?
 
AngleFromXAxis的工作方式是使用提供的两个点创建一条线,并返回它与世界X轴的角度。
 
如果确实存在公共顶点,则应将其与其他两个点配对,使用AngleFromXAxis两次,然后从另一个中减去一个。

jakebullet70 发表于 2022-7-6 15:14:23

 
令我沮丧的是,我一年大约有3周的时间来扮演Autocad大师,正如你所想象的那样,我做得很差劲。(现在,如果你有一些SQL或.NET,那么我可以)所以当你说“公共顶点”或“世界起源”时,我不知道那是什么。(我继承了这个项目,你的程序员是什么?在这里修复这个)
 
但基本上,我用GetPoint得到2个点,然后插入一个现有的图形,均匀分布在这条线上。他们要求的是旋转刚插入的图形,使其与点成什么角度。因此,如果两个点是180度(上下),则将图形旋转180度。如果这两个点从左到右,则为0度。所以我只有GetPoint函数中的两个数组。
 
再次感谢

BIGAL 发表于 2022-7-6 15:19:36

简单的老式罪恶
 
当你得到一个点时,它由3部分x,y,z组成,你只需要应用一个简单的正弦规则sin(ang)=o/h cos=a/h tan=o/a(其他人有回答ohahoa的习惯)
 
ie pt1(0)=x1 pt1(1)=y1 pt1(2)=z
pt2(0)=x2 pt2(1)=y2 pt1(2)=z
 
a=pt2(0)-pt1(0)
o=pt2(1)-pt1(1)
h=sqrt(a^2+o^2)
 
尝试记住pt1和pt2的正确dim
将dblPOINT(0到2)设置为双精度
 
我会写两个函数,距离和角度,这样你们可以在其他程序中随时使用它们。它可能是lisp中的标准vba函数(距离pt1 pt2)(角度pt1 pt2)?

SEANT 发表于 2022-7-6 15:21:38

BIGAL提到的标准VBA函数实际上就是这个图。公用事业角度x轴(和ThisDrawing.Utility.GetDistance表示距离)。毫无疑问,AngleFromXAxis使用了相同的数学公式。
 
然而,需要注意的是,在UCS中使用这两个函数而不是世界坐标系时。如果可能存在替代UCS,则需要坐标转换。参见示例:
 
 
Sub AngleSample()
Dim vPoint1 As Variant
Dim vPoint2 As Variant
Dim vTrans1 As Variant
Dim vTrans2 As Variant
Dim d As Double
Dim strMsg As String
With ThisDrawing.Utility
   On Error Resume Next
   vPoint1 = .GetPoint(, "Select Point 1: " & vbCr)
   If Err <> 0 Then Exit Sub
   vTrans1 = .TranslateCoordinates(vPoint1, acWorld, acUCS, 0)
   vPoint2 = .GetPoint(vTrans1, "Select Point 2: ")
   If Err <> 0 Then Exit Sub
   On Error GoTo 0
   vTrans2 = .TranslateCoordinates(vPoint2, acWorld, acUCS, 0)
   d = .AngleFromXAxis(vTrans1, vTrans2)
   strMsg = .AngleToString(d, acDegrees, 2)
   .Prompt "Angle in Degrees is " & strMsg & vbLf
End With
End Sub

jakebullet70 发表于 2022-7-6 15:26:24

肖特,比格尔,谢谢
 
也许我看错了。。。如果你看我上传的图片。您可以看到,我插入的图形(称为椅子)跨使用GetPoint选择的线插入。因此,如果这条线是从12点到6点,那么椅子被均匀地间隔90度插入。如果线是从左向右的,则椅子将插入0度。
 
至少直到本周我都是这样理解的。现在他们希望它遵循最右边的数字。这就是为什么我要计算学位。
 
我想我看错了。任何评论都会很有帮助。
 
谢谢

Oliver 发表于 2022-7-6 15:31:22

 
可以使用旋转。。键入Ro,然后选择对象。。。进来选择参考,该参考是来自对象的新角度。。然后输入要旋转的指定角度。。
 
对不起,我英语不好。。
 
奥利弗

BIGAL 发表于 2022-7-6 15:39:44

我认为你做错的是计算角度排序,Autocad以弧度逆时针测量角度,在编写代码时不注意单位设置,因此有时你甚至需要知道要在哪个象限中加90度或减90度,这样块就不会出现倒置。还要确保你的世界UCS。
 
对于你的方块,你将线的角度加1.5714,然后倒置调整。

Oliver 发表于 2022-7-6 15:45:05

这是一部电影。。。
 
3
 
页: [1] 2
查看完整版本: VBA-从2点获取角度