问题提出:在AutoCad空间坐标系中,插入一图块需要的基本条件是,插入的空间坐标点,X,Y,Z轴的方向角。
我的解决方法是用一个线段来确定插入空间坐标系中的方向角,特点是程序调试时对方向角的确认比较直观,提高工作效率。
在空间任意两点可以确定一条直线,两点坐标确定,一种方法是输入坐标,另一种是通过交互式方法确定两点坐标。
请教各位大侠,是否还有更好的数据模型。Function RotateZ_Axis(ByVal sPoint As Variant, ByVal ePoint As Variant) As Double
Dim EntAngle As Double
Dim deltaX As Double, deltaY As Double, deltaZ As Double
deltaX = sPoint(0) - ePoint(0): deltaY = sPoint(1) - ePoint(1): deltaZ = sPoint(2) - ePoint(2):
If deltaY >= 0 And deltaX > 0 Then
EntAngle = Atn(deltaY / deltaX)
ElseIf deltaY >= 0 And deltaX < 0 Then
EntAngle = Pi + Atn(deltaY / deltaX)
ElseIf deltaY < 0 And deltaX < 0 Then
EntAngle = Pi + Atn(deltaY / deltaX)
ElseIf deltaY < 0 And deltaX > 0 Then
EntAngle = 2 * Pi + Atn(deltaY / deltaX)
End If
If deltaX = 0 Then
If deltaY > 0 Then
EntAngle = Pi / 2
ElseIf deltaY > 0 Then
EntAngle = Pi * 1.5
End If
End If
RotateZ_Axis = EntAngle
End FunctionFunction RotateX_Axis(txtEnt As String) As Double
Dim Ent As AcadLine
Dim EntAngle As Double
Set Ent = ThisDrawing.HandleToObject(txtEnt)
If deltaY >= 0 And deltaX > 0 Then
EntAngle = Atn(deltaY / deltaX)
ElseIf deltaY >= 0 And deltaX < 0 Then
EntAngle = Pi + Atn(deltaY / deltaX)
ElseIf deltaY < 0 And deltaX < 0 Then
EntAngle = Pi + Atn(deltaY / deltaX)
ElseIf deltaY < 0 And deltaX > 0 Then
EntAngle = 2 * Pi + Atn(deltaY / deltaX)
End If
If deltaX = 0 Then
If deltaY > 0 Then
EntAngle = Pi / 2
ElseIf deltaY > 0 Then
EntAngle = Pi * 1.5
End If
End If
RotateZ_Axis = EntAngle
End Function
RotateZ_Axis,RotateX_Axis,RotateY_Axis返回的的是直线在X,Y,Z坐标轴的方向角。请问各位大侠是否还有更好的几何解决方法。
我的解决方法是用一个线段来确定插入空间坐标系中的方向角,特点是程序调试时对方向角的确认比较直观,提高工作效率。
在空间任意两点可以确定一条直线,两点坐标确定,一种方法是输入坐标,另一种是通过交互式方法确定两点坐标。
请教各位大侠,是否还有更好的数据模型。Function RotateZ_Axis(ByVal sPoint As Variant, ByVal ePoint As Variant) As Double
Dim EntAngle As Double
Dim deltaX As Double, deltaY As Double, deltaZ As Double
deltaX = sPoint(0) - ePoint(0): deltaY = sPoint(1) - ePoint(1): deltaZ = sPoint(2) - ePoint(2):
If deltaY >= 0 And deltaX > 0 Then
EntAngle = Atn(deltaY / deltaX)
ElseIf deltaY >= 0 And deltaX < 0 Then
EntAngle = Pi + Atn(deltaY / deltaX)
ElseIf deltaY < 0 And deltaX < 0 Then
EntAngle = Pi + Atn(deltaY / deltaX)
ElseIf deltaY < 0 And deltaX > 0 Then
EntAngle = 2 * Pi + Atn(deltaY / deltaX)
End If
If deltaX = 0 Then
If deltaY > 0 Then
EntAngle = Pi / 2
ElseIf deltaY > 0 Then
EntAngle = Pi * 1.5
End If
End If
RotateZ_Axis = EntAngle
End FunctionFunction RotateX_Axis(txtEnt As String) As Double
Dim Ent As AcadLine
Dim EntAngle As Double
Set Ent = ThisDrawing.HandleToObject(txtEnt)
If deltaY >= 0 And deltaX > 0 Then
EntAngle = Atn(deltaY / deltaX)
ElseIf deltaY >= 0 And deltaX < 0 Then
EntAngle = Pi + Atn(deltaY / deltaX)
ElseIf deltaY < 0 And deltaX < 0 Then
EntAngle = Pi + Atn(deltaY / deltaX)
ElseIf deltaY < 0 And deltaX > 0 Then
EntAngle = 2 * Pi + Atn(deltaY / deltaX)
End If
If deltaX = 0 Then
If deltaY > 0 Then
EntAngle = Pi / 2
ElseIf deltaY > 0 Then
EntAngle = Pi * 1.5
End If
End If
RotateZ_Axis = EntAngle
End Function
RotateZ_Axis,RotateX_Axis,RotateY_Axis返回的的是直线在X,Y,Z坐标轴的方向角。请问各位大侠是否还有更好的几何解决方法。
--------------------------------------------------------------
程序,犹如人生。