Thread: Graphics to PDF
View Single Post
  #17  
Old December 20th, 2009, 08:50 AM posted to microsoft.public.access
James A. Fortune
external usenet poster
 
Posts: 903
Default Graphics to PDF

On Dec 19, 11:36 pm, "James A. Fortune"
wrote:


boolSuccess = GetXY(dblA, dblB, CDbl(Theta + DeltaTheta), dblCurX,
dblCurY)
X2 = dblCurX
Y2 = dblCurY
dblRefAngle = GetReferenceAngle(CDbl(Theta + DeltaTheta), dblCurX,
dblCurY, dblA, dblB)
thePiecewiseCurve.Curves(NSeg).Beta = GetBezierAngle(CDbl(Theta +
DeltaTheta), dblRefAngle, "Beta")


It would probably be nice to show code for the following also:

GetXY()
GetReferenceAngle()
GetBezierAngle()

Public Function GetXY(dblA As Double, dblB As Double, dblTheta As
Double, ByRef dblX As Double, ByRef dblY As Double) As Boolean
Dim dblDenom As Double
Dim dblAbsX As Double
Dim dblAbsY As Double
Const DegToRad = 0.0174532925

GetXY = True
If dblTheta = -90 Or dblTheta = 90 Then
dblX = 0
dblY = Sgn(dblTheta) * dblB
Exit Function
End If
If dblTheta = 0 Then
dblX = dblA
dblY = 0
Exit Function
End If
If dblTheta = 180 Then
dblX = -dblA
dblY = 0
Exit Function
End If
dblDenom = dblB * dblB + dblA * dblA * Tan(dblTheta * DegToRad) * Tan
(dblTheta * DegToRad)
'calculate the absolute value of x and y
dblAbsX = (dblA * dblB) / Sqr(dblDenom)
dblAbsY = dblAbsX * Abs(Tan(dblTheta * DegToRad))
Select Case dblTheta
Case Is 90#:
dblX = dblAbsX
dblY = dblAbsY
Case Is 180#:
dblX = -dblAbsX
dblY = dblAbsY
Case Is 270#:
dblX = -dblAbsX
dblY = -dblAbsY
Case Else
dblX = dblAbsX
dblY = -dblAbsY
End Select
End Function

Public Function GetReferenceAngle(dblTheta As Double, dblX As Double,
dblY As Double, dblA As Double, dblB As Double) As Double
Dim dblReferenceAngle As Double
Const DegToRad = 0.0174532925

GetReferenceAngle = 0
If dblTheta = 0 Or dblTheta = 360 Then
GetReferenceAngle = 90
Exit Function
End If
If dblTheta = 180 Then
GetReferenceAngle = -90
Exit Function
End If
GetReferenceAngle = Atn(dydx(dblA, dblB, dblX, dblY)) / DegToRad
End Function

Public Function dydx(dblA As Double, dblB As Double, dblCurX As
Double, dblCurY As Double) As Double
dydx = -dblB * dblB * dblCurX / (dblA * dblA * dblCurY)
End Function

Public Function GetBezierAngle(dblTheta As Double, dblReferenceAngle
As Double, strAlphaBeta As String) As Double
GetBezierAngle = 0
If dblTheta 360 Then dblTheta = dblTheta - 360
If strAlphaBeta = "Alpha" Then
Select Case dblTheta
Case Is 180:
GetBezierAngle = dblReferenceAngle + 180#
Case Else
GetBezierAngle = dblReferenceAngle
End Select
Else
Select Case dblTheta
Case Is 180:
GetBezierAngle = dblReferenceAngle + 180#
Case Else
GetBezierAngle = dblReferenceAngle
End Select
End If
End Function

Note: It turned out not to be necessary to get the "Alpha" Bezier
angles, so strAlphaBeta and it's code can be removed for the "Alpha"
case.

James A. Fortune