就我的 Cone Creator 的超出范围问题向我提出建议
Advice me in out of range problem of my cone creator
我已经 运行 这段代码并单击绘制我发现了一个超出范围的问题并且调试器给我突出显示了这一行 Set coneobject = ThisDrawing.ModelSpace.AddCone(conecenter, coneradius, coneheight)
但这对我来说没有错
你能推荐我吗?
Private Sub cmd_draw_Click()
UserForm1.Hide
Dim coneangle As Double
Select Case comboboxangle.Text
Case 0
coneangle = 15
Case 1
coneangle = 30
Case 2
coneangle = 45
Case 3
coneangle = 60
End Select
Drawcone coneangle
UserForm1.show
End Sub
Public Sub Drawcone(coneangle As Double)
Dim coneobject As Acad3DSolid
Dim conecenter As Variant
Dim coneheight As Double
'Dim coneangle As Double
Dim coneradius As Double
coneheight = UserForm1.TextBox1.Text
With ThisDrawing.Utility
conecenter = .GetPoint(, vbCr & "select position for Top of cone:")
End With
conecenter(2) = conecenter(2) - coneheight / 2#
coneradius = coneheight * Tan(coneangle)
'Set coneobject = ThisDrawing.ModelSpace.AddCone(conecenter, coneradius, coneheight)
Set coneobject = ThisDrawing.ModelSpace.AddCone(conecenter, coneradius, coneheight)
coneobject.Update
ThisDrawing.ChangeViewDirection
End Sub
Private Sub cmd_finish_Click()
Unload Me
End Sub
''Private Sub cmd_pickpoint_Click()
''UserForm1.Hide
''Dim conecenter As Variant
'With ThisDrawing.Utility
'conecenter = .GetPoint(, vbCr & "select position for Top of cone:")
'End With
'UserForm1.show
'End Sub
Private Sub UserForm_Initialize()
With comboboxangle
.AddItem "15"
.AddItem "30"
.AddItem "45"
.AddItem "60"
.Text = "Empty"
End With
End Sub
一个可能的问题是您对 tan
函数的使用:tan
等三角函数使用 angular 值以 弧度 表示,不是学位。
因此,您需要更改:
coneradius = coneheight * Tan(coneangle)
至:
coneradius = coneheight * Tan(pi * (coneangle / 180#))
使用度数不会导致函数出错(因为您仍然提供数值),但该值将以弧度解释,因此会产生意想不到的结果(例如,15 度将被解释为 15 弧度 = 139.4 度)。
我已经 运行 这段代码并单击绘制我发现了一个超出范围的问题并且调试器给我突出显示了这一行 Set coneobject = ThisDrawing.ModelSpace.AddCone(conecenter, coneradius, coneheight)
但这对我来说没有错 你能推荐我吗?
Private Sub cmd_draw_Click()
UserForm1.Hide
Dim coneangle As Double
Select Case comboboxangle.Text
Case 0
coneangle = 15
Case 1
coneangle = 30
Case 2
coneangle = 45
Case 3
coneangle = 60
End Select
Drawcone coneangle
UserForm1.show
End Sub
Public Sub Drawcone(coneangle As Double)
Dim coneobject As Acad3DSolid
Dim conecenter As Variant
Dim coneheight As Double
'Dim coneangle As Double
Dim coneradius As Double
coneheight = UserForm1.TextBox1.Text
With ThisDrawing.Utility
conecenter = .GetPoint(, vbCr & "select position for Top of cone:")
End With
conecenter(2) = conecenter(2) - coneheight / 2#
coneradius = coneheight * Tan(coneangle)
'Set coneobject = ThisDrawing.ModelSpace.AddCone(conecenter, coneradius, coneheight)
Set coneobject = ThisDrawing.ModelSpace.AddCone(conecenter, coneradius, coneheight)
coneobject.Update
ThisDrawing.ChangeViewDirection
End Sub
Private Sub cmd_finish_Click()
Unload Me
End Sub
''Private Sub cmd_pickpoint_Click()
''UserForm1.Hide
''Dim conecenter As Variant
'With ThisDrawing.Utility
'conecenter = .GetPoint(, vbCr & "select position for Top of cone:")
'End With
'UserForm1.show
'End Sub
Private Sub UserForm_Initialize()
With comboboxangle
.AddItem "15"
.AddItem "30"
.AddItem "45"
.AddItem "60"
.Text = "Empty"
End With
End Sub
一个可能的问题是您对 tan
函数的使用:tan
等三角函数使用 angular 值以 弧度 表示,不是学位。
因此,您需要更改:
coneradius = coneheight * Tan(coneangle)
至:
coneradius = coneheight * Tan(pi * (coneangle / 180#))
使用度数不会导致函数出错(因为您仍然提供数值),但该值将以弧度解释,因此会产生意想不到的结果(例如,15 度将被解释为 15 弧度 = 139.4 度)。