#Region TESTING
_QPDF_Arrow(10, 10, 100, 10, 10, 10, 0.1, 1)
; #FUNCTION# ====================================================================================================================
; Name ..........: _QPDF_Arrow
; Description ...: Draw Arrow with ArrowHeads
; Syntax ........: _QPDF_Arrow($iX1, $iY1, $iX2, $iY2[, $iArrowHeadLenPercent = 10[, $iArrowHeadAngleDegree = 10[,
; $iArrowThickness = 0.1[, $iArrowHeadThickness = 0.1]]]])
; Parameters ....: $iX1 - an integer value.
; $iY1 - an integer value.
; $iX2 - an integer value.
; $iY2 - an integer value.
; $iArrowHeadLenPercent - [optional] an integer value. Default is 10. In relation to the length of the arrows.
; $iArrowHeadAngleDegree - [optional] an integer value. Default is 10.
; $iArrowThickness - [optional] an integer value. Default is 0.1.
; $iArrowHeadThickness - [optional] an integer value. Default is 0.1.
; Return values .: None
; Author ........: mLipok
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.quickpdf.org/forum/drawing-of-the-arrowhead-on-the-end-of-drown-line_topic3155.html
; Example .......: No
; ===============================================================================================================================
Func _QPDF_Arrow($iX1, $iY1, $iX2, $iY2, $iArrowHeadLenPercent = 10, $iArrowHeadAngleDegree = 10, $iArrowThickness = 0.1, $iArrowHeadThickness = 0.1)
Local $oQP
If _QPDF_CreateObjectAndUnlock($oQP) = 1 Then
$oQP.SetOrigin($__eQPDF_SORIGIN_TopLeft);
$oQP.SetMeasurementUnits($__eQPDF_MUNITS_Milimeters)
$oQP.SetLineWidth($iArrowThickness)
$oQP.SetLineCap(1)
$oQP.Drawline($iX1, $iY1, $iX2, $iY2)
Local $iX12 = $iX2 - $iX1
Local $iY12 = $iY2 - $iY1
; Assign a Local constant variable the approximate PI number.
Local Const $PI = _Radian(180)
$iArrowHeadAngleRadian = _Radian($iArrowHeadAngleDegree)
; Tan(angle) = Y / X
; Atan(X / Y) = angle
Local $iArrowRadian = ATan($iY12 / $iX12)
Local $iReverseArrowRadian = $iArrowRadian + $PI
Local $iArrowLength
If $iY12 = 0 Then
$iArrowLength = $iX12
Else
; Sin(angle) = Y / Len
$iArrowLength = $iY12 / Sin($iArrowRadian)
EndIf
Local $iArrowHeadLength = $iArrowLength * $iArrowHeadLenPercent / 100
Local $iRadianTiltedToTheRight = $iReverseArrowRadian + $iArrowHeadAngleRadian
Local $iRadianTiltedToTheLeft = $iReverseArrowRadian - $iArrowHeadAngleRadian
; tg(angle) = Y / X
; ctg(angle) = X / Y
; sin(angle) = Y / $iArrowHeadLength
; cos(angle) = X / $iArrowHeadLength
$oQP.SetLineWidth($iArrowHeadThickness)
$oQP.Drawline($iX2, $iY2, $iX2 + Cos($iRadianTiltedToTheRight) * $iArrowHeadLength, $iY2 + Sin($iRadianTiltedToTheRight) * $iArrowHeadLength)
$oQP.Drawline($iX2, $iY2, $iX2 + Cos($iRadianTiltedToTheLeft) * $iArrowHeadLength, $iY2 + Sin($iRadianTiltedToTheLeft) * $iArrowHeadLength)
_QPDF_Display($oQP)
EndIf
EndFunc ;==>_QPDF_Arrow
#EndRegion TESTING