monoceres Posted October 4, 2008 Share Posted October 4, 2008 Hi! I have struggled with this function today and just when I thought that it was perfect I find a bug that I can't get my head around how to solve. Here's the function, and sample code that shows the problem. expandcollapse popup#include <GDIPLuS.au3> #include <math.au3> Global Const $width = 500 Global Const $height = 300 Global Const $PI = 3.14159 Opt("GUIOnEventMode", 1) $hwnd = GUICreate("Arrow", $width, $height) GUISetOnEvent(-3, "close") GUISetState() _GDIPlus_Startup() $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd) $pen2 = _GDIPlus_PenCreate(0xFF0000FF, 1) _AntiAlias($graphics,4) ; Works like it should: _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2-50, 450, $height / 2+50, 20, 25, $pen2) Sleep(2000) _GDIplus_GraphicsClear($graphics,0xFFFFFFFF) ; $iY1 > $iY2 so the arrow f's up _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2, 450, $height / 2-50, 20, 25, $pen2) Func _GDIplus_GraphicsDrawArrow($hGraphics, $iX1, $iY1, $iX2, $iY2, $iArrowLength,$iArrowBase, $hPen) If $iY1>$iY2 Then ; Do something intelligent EndIf Local $iLength Local $iLengthWithoutArrow Local $iAngle Local $iArrowX Local $iArrowY Local $iC Local $iXRatio Local $iYRatio $iArrowBase /= 2 $iLength = Sqrt(($iX2 - $iX1) ^ 2 + ($iY2 - $iY1) ^ 2); Thx to pythagora $iLengthWithoutArrow = $iLength - $iArrowLength; = Length without the arrow $iAngle = ASin(($iX2 - $iX1) / $iLength); The angle of the entire line, relative to the Y axis $iArrowX = $iX1 + ($iLengthWithoutArrow * Sin($iAngle)) $iArrowY = $iY1 + ($iLengthWithoutArrow * Cos($iAngle)) ;MsgBox(0,"",$iAngle) $iC = Sqrt(($iArrowLength) ^ 2); The longest side in the triangle $iXRatio = $iC * Cos($iAngle) / ($iArrowLength / $iArrowBase) $iYRatio = $iC * Sin($iAngle) / ($iArrowLength / $iArrowBase) _GDIPlus_GraphicsDrawLine($hGraphics, $iArrowX, $iArrowY, $iArrowX - $iXRatio, $iArrowY + $iYRatio, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $iX2, $iY2, $iArrowX - $iXRatio, $iArrowY + $iYRatio, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $iArrowX, $iArrowY, $iArrowX + $iXRatio, $iArrowY - $iYRatio, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $iX2, $iY2, $iArrowX + $iXRatio, $iArrowY - $iYRatio, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $iX1, $iY1, $iArrowX, $iArrowY, $hPen) EndFunc ;==>_GDIplus_GraphicsDrawArrow Do Sleep(100) Until False Func _AntiAlias($hGraphics, $iMode) Local $aResult $aResult = DllCall($ghGDIPDll, "int", "GdipSetSmoothingMode", "hwnd", $hGraphics, "int", $iMode) If @error Then Return SetError(@error, @extended, False) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_AntiAlias Func close() Exit EndFunc ;==>close I just can't get my head around getting it to work when $iY1>$iY2. Thanks in advance Broken link? PM me and I'll send you the file! Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 4, 2008 Share Posted October 4, 2008 I'm not good with GDI+ (never used it) but couldn't you take the Abs() of $iY1 and $iY2 and then maniuplate from there? Just a thought. Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
trancexx Posted October 4, 2008 Share Posted October 4, 2008 (edited) I think it's that line when assigning $iArrowY edit: try this expandcollapse popup#include <GDIPLuS.au3> #include <math.au3> Global Const $width = 500 Global Const $height = 400 Global Const $PI = 3.14159 Opt("GUIOnEventMode", 1) $hwnd = GUICreate("Arrow", $width, $height) GUISetOnEvent(-3, "close") GUISetState() _GDIPlus_Startup() $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd) $pen2 = _GDIPlus_PenCreate(0xFF0000FF, 1) _AntiAlias($graphics,4) ; Works like it should: _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2-50, 450, $height / 2+50, 20, 25, $pen2) Sleep(2000) _GDIplus_GraphicsClear($graphics,0xFFFFFFFF) ; $iY1 > $iY2 so the arrow f's up _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2-50, 450, $height / 2-50, 20, 25, $pen2) Func _GDIplus_GraphicsDrawArrow($hGraphics, $iX1, $iY1, $iX2, $iY2, $iArrowLength, $iArrowBase, $hPen) If $iY1 > $iY2 Then ; Do something intelligent EndIf Local $iLength Local $iLengthWithoutArrow Local $iAngle Local $iArrowX Local $iArrowY Local $iC Local $iXRatio Local $iYRatio $iArrowBase /= 2 $iLength = Sqrt(($iX2 - $iX1) ^ 2 + ($iY2 - $iY1) ^ 2); Thx to pythagora $iLengthWithoutArrow = $iLength - $iArrowLength; = Length without the arrow $iAngle = ASin(($iX2 - $iX1) / $iLength); The angle of the entire line, relative to the Y axis $iArrowX = $iX1 + ($iLengthWithoutArrow * Sin($iAngle)) $iArrowY = $iY1 - ($iLengthWithoutArrow * Cos($iAngle)) ; <-- this line!!! Local $Xa, $Ya, $Xb, $Yb, $Xc, $Yc $Xa = $iArrowX - $iArrowBase * Cos($iAngle) $Ya = $iArrowY - $iArrowBase * Sin($iAngle) $Xb = $iArrowX + $iArrowBase * Cos($iAngle) $Yb = $iArrowY + $iArrowBase * Sin($iAngle) $Xc = $iArrowX + $iArrowLength * Sin($iAngle) $Yc = $iArrowY - $iArrowLength * Cos($iAngle) _GDIPlus_GraphicsDrawLine($hGraphics, $Xa, $Ya, $Xb, $Yb, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $Xa, $Ya, $Xc, $Yc, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $Xb, $Yb, $Xc, $Yc, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $iX1, $iY1, $iArrowX, $iArrowY, $hPen) EndFunc ;==>_GDIplus_GraphicsDrawArrow Do Sleep(100) Until False Func _AntiAlias($hGraphics, $iMode) Local $aResult $aResult = DllCall($ghGDIPDll, "int", "GdipSetSmoothingMode", "hwnd", $hGraphics, "int", $iMode) If @error Then Return SetError(@error, @extended, False) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_AntiAlias Func close() Exit EndFunc ;==>close I had to make it a bit larger. Edited October 4, 2008 by trancexx ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
Malkey Posted October 5, 2008 Share Posted October 5, 2008 (edited) Here is my attempt. expandcollapse popup#include <GDIPLuS.au3> #include <math.au3> Global Const $width = 500 Global Const $height = 300 Global Const $PI = 3.14159 Opt("GUIOnEventMode", 1) $hwnd = GUICreate("Arrow", $width, $height) GUISetOnEvent(-3, "close") GUISetState() _GDIPlus_Startup() $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd) $pen2 = _GDIPlus_PenCreate(0xFF0000FF, 1) _AntiAlias($graphics, 4) _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2 - 50, 450, $height / 2 + 50, 20, 25, $pen2) Sleep(2000) _GDIPlus_GraphicsClear($graphics, 0xFFFFFFFF) _GDIplus_GraphicsDrawArrow($graphics, 450, $height / 2, 50, $height / 2 - 50, 20, 25, $pen2) Sleep(2000) _GDIPlus_GraphicsClear($graphics, 0xFFFFFFFF) _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2+50, 450, $height / 2 - 50, 20, 25, $pen2) Sleep(2000) _GDIPlus_GraphicsClear($graphics, 0xFFFFFFFF) _GDIplus_GraphicsDrawArrow($graphics, 450, $height / 2 - 50, 50, $height / 2 , 20, 25, $pen2) Sleep(2000) _GDIPlus_GraphicsClear($graphics, 0xFFFFFFFF) _GDIplus_GraphicsDrawArrow($graphics, 450, $height / 2 - 50, 50, $height / 2 - 50, 20, 25, $pen2) Sleep(2000) _GDIPlus_GraphicsClear($graphics, 0xFFFFFFFF) _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2 - 50, 450, $height / 2 - 50, 20, 25, $pen2) Sleep(2000) _GDIPlus_GraphicsClear($graphics, 0xFFFFFFFF) _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2 - 50, 50, $height / 2 + 50, 20, 25, $pen2) Sleep(2000) _GDIPlus_GraphicsClear($graphics, 0xFFFFFFFF) _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2 + 50, 50, $height / 2 - 50, 20, 25, $pen2) Do Sleep(100) Until False Func _GDIplus_GraphicsDrawArrow($hGraphics, $iX1, $iY1, $iX2, $iY2, $iArrowLength, $iArrowBase, $hPen) Local $m = ATan(($iY2 - $iY1) / ($iX2 - $iX1)) $m = $m + ((($iY2 - $iY1) >= 0) And (($iX2 - $iX1) >= 0)) * $PI $m = $m + ((($iY2 - $iY1) < 0) And (($iX2 - $iX1) >= 0)) * $PI Local $By = $iY2 + ($iArrowLength * Sin(($m))) Local $Bx = $iX2 + ($iArrowLength * Cos(($m))) Local $By1 = $By + ($iArrowBase / 2 * Sin(($m - $PI / 2))) Local $Bx1 = $Bx + ($iArrowBase / 2 * Cos(($m - $PI / 2))) Local $By2 = $By + ($iArrowBase / 2 * Sin(($m + $PI / 2))) Local $Bx2 = $Bx + ($iArrowBase / 2 * Cos(($m + $PI / 2))) _GDIPlus_GraphicsDrawLine($hGraphics, $iX2, $iY2, $Bx1, $By1, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $iX2, $iY2, $Bx2, $By2, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $Bx, $By, $Bx1, $By1, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $Bx, $By, $Bx2, $By2, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $iX1, $iY1, $Bx, $By, $hPen) EndFunc ;==>_GDIplus_GraphicsDrawArrow Func _AntiAlias($hGraphics, $iMode) Local $aResult $aResult = DllCall($ghGDIPDll, "int", "GdipSetSmoothingMode", "hwnd", $hGraphics, "int", $iMode) If @error Then Return SetError(@error, @extended, False) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_AntiAlias Func close() Exit EndFunc ;==>close Edited October 5, 2008 by Malkey Link to comment Share on other sites More sharing options...
monoceres Posted October 5, 2008 Author Share Posted October 5, 2008 Thanks Malkey & trancexx. Both your scripts works well, Malkey's solution was a bit more advanced so I will have to study it before understanding it properly. Thanks again Broken link? PM me and I'll send you the file! Link to comment Share on other sites More sharing options...
Malkey Posted October 6, 2008 Share Posted October 6, 2008 When testing trancexx's example, I noticed that these two _GDIplus_GraphicsDrawArrow() function calls display the arrow pointing up. _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2 - 50, 50, $height / 2 + 50, 20, 25, $pen2) Sleep(2000) _GDIPlus_GraphicsClear($graphics, 0xFFFFFFFF) _GDIplus_GraphicsDrawArrow($graphics, 50, $height / 2 + 50, 50, $height / 2 - 50, 20, 25, $pen2) Link to comment Share on other sites More sharing options...
trancexx Posted October 19, 2008 Share Posted October 19, 2008 (edited) I was doing something with math these days and came up with this (for this) along the road: expandcollapse popup#include <GDIPLuS.au3> Global Const $width = 460 Global Const $height = 400 Opt("GUIOnEventMode", 1) $hwnd = GUICreate("Arrows", $width, $height) GUISetBkColor(0xFFFFFF) GUISetOnEvent(-3, "close") GUISetState() _GDIPlus_Startup() $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd) $pen2 = _GDIPlus_PenCreate(0x4FBB00C7, 1) _GDIPlus_GraphicsDrawLine($graphics, 230, 15, 230, 390, $pen2) _GDIPlus_GraphicsDrawLine($graphics, 10, 200, 450, 200, $pen2) _AntiAlias($graphics, 4) Global $t = 0, $s While 1 While $s < 4 For $i = 1 To 56 _GDIplus_GraphicsDrawArrow($graphics, 230, 200, 300, 7 * $i, 40, 60, $pen2) Sleep(30) ;_GDIplus_GraphicsClear($graphics,0xFFFFFFFF) Next $s += 1 WEnd Sleep (500) _GDIplus_GraphicsClear($graphics,0xFFFFFFFF) _GDIPlus_GraphicsDrawLine($graphics, 230, 15, 230, 390, $pen2) _GDIPlus_GraphicsDrawLine($graphics, 10, 200, 450, 200, $pen2) $s = 0 WEnd Do Sleep(100) Until False Func _GDIplus_GraphicsDrawArrow($hGraphics, $iX1, $iY1, $iX2, $iY2, $iArrowLength, $iArrowBase, $hPen) Local $iLength Local $iLengthWithoutArrow Local $iAngle Local $iArrowX Local $iArrowY $iArrowBase /= 2 $iLength = Sqrt(($iX2 - $iX1) ^ 2 + ($iY2 - $iY1) ^ 2) $iLengthWithoutArrow = $iLength - $iArrowLength Switch $s Case 0 $iAngle = _ATan2(($iX1 - $iX2), ($iY1 - $iY2)) Case 1 $iAngle = _ATan2(($iX2 - $iX1), ($iY2 - $iY1)) Case 2 $iAngle = _ATan2(($iY2 - $iY1), ($iX2 - $iX1)) Case 3 $iAngle = _ATan2(($iY1 - $iY2), ($iX1 - $iX2)) EndSwitch $iArrowX = $iX1 + ($iLengthWithoutArrow * Sin($iAngle)) $iArrowY = $iY1 - ($iLengthWithoutArrow * Cos($iAngle)) Local $Xa, $Ya, $Xb, $Yb, $Xc, $Yc $Xa = $iArrowX - $iArrowBase * Cos($iAngle) $Ya = $iArrowY - $iArrowBase * Sin($iAngle) $Xb = $iArrowX + $iArrowBase * Cos($iAngle) $Yb = $iArrowY + $iArrowBase * Sin($iAngle) $Xc = $iArrowX + $iArrowLength * Sin($iAngle) $Yc = $iArrowY - $iArrowLength * Cos($iAngle) _GDIPlus_GraphicsDrawLine($hGraphics, $Xa, $Ya, $Xb, $Yb, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $Xa, $Ya, $Xc, $Yc, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $Xb, $Yb, $Xc, $Yc, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $iX1, $iY1, $iArrowX, $iArrowY, $hPen) EndFunc ;==>_GDIplus_GraphicsDrawArrow Func _AntiAlias($hGraphics, $iMode) Local $aResult = DllCall($ghGDIPDll, "int", "GdipSetSmoothingMode", "hwnd", $hGraphics, "int", $iMode) If @error Then Return SetError(@error, @extended, False) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_AntiAlias Func close() Exit EndFunc ;==>close Func _ATan2($nY, $nX) Return SetError(0, 0, ATan($nY / $nX) + ((($nY <= 0) And ($nX < 0)) + (($nY > 0) And ($nX < 0)) - 2 * (($nY < 0) And ($nX < 0))) * 3.14159265358979323846) EndFunc ;==>_ATan2 Edited October 19, 2008 by trancexx ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
komalo Posted October 19, 2008 Share Posted October 19, 2008 I was doing something with math these days and came up with this (for this) along the road: expandcollapse popup#include <GDIPLuS.au3> Global Const $width = 460 Global Const $height = 400 Opt("GUIOnEventMode", 1) $hwnd = GUICreate("Arrows", $width, $height) GUISetBkColor(0xFFFFFF) GUISetOnEvent(-3, "close") GUISetState() _GDIPlus_Startup() $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd) $pen2 = _GDIPlus_PenCreate(0x4FBB00C7, 1) _GDIPlus_GraphicsDrawLine($graphics, 230, 15, 230, 390, $pen2) _GDIPlus_GraphicsDrawLine($graphics, 10, 200, 450, 200, $pen2) _AntiAlias($graphics, 4) Global $t = 0, $s While 1 While $s < 4 For $i = 1 To 56 _GDIplus_GraphicsDrawArrow($graphics, 230, 200, 300, 7 * $i, 40, 60, $pen2) Sleep(30) ;_GDIplus_GraphicsClear($graphics,0xFFFFFFFF) Next $s += 1 WEnd Sleep (500) _GDIplus_GraphicsClear($graphics,0xFFFFFFFF) _GDIPlus_GraphicsDrawLine($graphics, 230, 15, 230, 390, $pen2) _GDIPlus_GraphicsDrawLine($graphics, 10, 200, 450, 200, $pen2) $s = 0 WEnd Do Sleep(100) Until False Func _GDIplus_GraphicsDrawArrow($hGraphics, $iX1, $iY1, $iX2, $iY2, $iArrowLength, $iArrowBase, $hPen) Local $iLength Local $iLengthWithoutArrow Local $iAngle Local $iArrowX Local $iArrowY $iArrowBase /= 2 $iLength = Sqrt(($iX2 - $iX1) ^ 2 + ($iY2 - $iY1) ^ 2) $iLengthWithoutArrow = $iLength - $iArrowLength Switch $s Case 0 $iAngle = _ATan2(($iX1 - $iX2), ($iY1 - $iY2)) Case 1 $iAngle = _ATan2(($iX2 - $iX1), ($iY2 - $iY1)) Case 2 $iAngle = _ATan2(($iY2 - $iY1), ($iX2 - $iX1)) Case 3 $iAngle = _ATan2(($iY1 - $iY2), ($iX1 - $iX2)) EndSwitch $iArrowX = $iX1 + ($iLengthWithoutArrow * Sin($iAngle)) $iArrowY = $iY1 - ($iLengthWithoutArrow * Cos($iAngle)) Local $Xa, $Ya, $Xb, $Yb, $Xc, $Yc $Xa = $iArrowX - $iArrowBase * Cos($iAngle) $Ya = $iArrowY - $iArrowBase * Sin($iAngle) $Xb = $iArrowX + $iArrowBase * Cos($iAngle) $Yb = $iArrowY + $iArrowBase * Sin($iAngle) $Xc = $iArrowX + $iArrowLength * Sin($iAngle) $Yc = $iArrowY - $iArrowLength * Cos($iAngle) _GDIPlus_GraphicsDrawLine($hGraphics, $Xa, $Ya, $Xb, $Yb, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $Xa, $Ya, $Xc, $Yc, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $Xb, $Yb, $Xc, $Yc, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $iX1, $iY1, $iArrowX, $iArrowY, $hPen) EndFunc ;==>_GDIplus_GraphicsDrawArrow Func _AntiAlias($hGraphics, $iMode) Local $aResult = DllCall($ghGDIPDll, "int", "GdipSetSmoothingMode", "hwnd", $hGraphics, "int", $iMode) If @error Then Return SetError(@error, @extended, False) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_AntiAlias Func close() Exit EndFunc ;==>close Func _ATan2($nY, $nX) Return SetError(0, 0, ATan($nY / $nX) + ((($nY <= 0) And ($nX < 0)) + (($nY > 0) And ($nX < 0)) - 2 * (($nY < 0) And ($nX < 0))) * 3.14159265358979323846) EndFunc ;==>_ATan2i am running it now , it is amazing [font="Palatino Linotype"][size="3"]AutoIt Script Examples :[/size][/font][font="Palatino Linotype"][size="3"]_CaptureBehindWindowGlass CMD for Windows Vista/Seven[/size][/font][left][/left][font="Palatino Linotype"][size="3"]Non AutoIt Script programs : Border Skin - Aero Glass On XP[/size][/font] Link to comment Share on other sites More sharing options...
trancexx Posted October 20, 2008 Share Posted October 20, 2008 i am running it now , it is amazingyes, it's kind of hipnotisingtry randomizing $iArrowLength or $iArrowBase or even color of the pen to have more effects. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
komalo Posted October 20, 2008 Share Posted October 20, 2008 (edited) it does some amazing effects on changing them , look at that one you know this function could be a great intro in a program by changing the variables for several effects expandcollapse popup#include <GDIPLuS.au3> Global Const $width = 460 Global Const $height = 400 Opt("GUIOnEventMode", 1) $hwnd = GUICreate("Arrows", $width, $height) GUISetBkColor(0xFFFFFF) GUISetOnEvent(-3, "close") GUISetState() _GDIPlus_Startup() $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd) $pen2 = _GDIPlus_PenCreate(0x4FBB00C7, 1) _GDIPlus_GraphicsDrawLine($graphics, 230, 15, 230, 390, $pen2) _GDIPlus_GraphicsDrawLine($graphics, 10, 200, 450, 200, $pen2) _AntiAlias($graphics, 4) Global $t = 0, $s While 1 While $s < 4 For $i = 1 To 56 _GDIplus_GraphicsDrawArrow($graphics, 230, 200, 300, 7 * $i, 100, 900, $pen2) Sleep(30) ;_GDIplus_GraphicsClear($graphics,0xFFFFFFFF) Next $s += 1 WEnd Sleep (500) _GDIplus_GraphicsClear($graphics,0xFFFFFFFF) _GDIPlus_GraphicsDrawLine($graphics, 230, 15, 230, 390, $pen2) _GDIPlus_GraphicsDrawLine($graphics, 10, 200, 450, 200, $pen2) $s = 0 WEnd Do Sleep(100) Until False Func _GDIplus_GraphicsDrawArrow($hGraphics, $iX1, $iY1, $iX2, $iY2, $iArrowLength, $iArrowBase, $hPen) Local $iLength Local $iLengthWithoutArrow Local $iAngle Local $iArrowX Local $iArrowY $iArrowBase /= 2 $iLength = Sqrt(($iX2 - $iX1) ^ 2 + ($iY2 - $iY1) ^ 2) $iLengthWithoutArrow = $iLength - $iArrowLength Switch $s Case 0 $iAngle = _ATan2(($iX1 - $iX2), ($iY1 - $iY2)) Case 1 $iAngle = _ATan2(($iX2 - $iX1), ($iY2 - $iY1)) Case 2 $iAngle = _ATan2(($iY2 - $iY1), ($iX2 - $iX1)) Case 3 $iAngle = _ATan2(($iY1 - $iY2), ($iX1 - $iX2)) EndSwitch $iArrowX = $iX1 + ($iLengthWithoutArrow * Sin($iAngle)) $iArrowY = $iY1 - ($iLengthWithoutArrow * Cos($iAngle)) Local $Xa, $Ya, $Xb, $Yb, $Xc, $Yc $Xa = $iArrowX - $iArrowBase * Cos($iAngle) $Ya = $iArrowY - $iArrowBase * Sin($iAngle) $Xb = $iArrowX + $iArrowBase * Cos($iAngle) $Yb = $iArrowY + $iArrowBase * Sin($iAngle) $Xc = $iArrowX + $iArrowLength * Sin($iAngle) $Yc = $iArrowY - $iArrowLength * Cos($iAngle) _GDIPlus_GraphicsDrawLine($hGraphics, $Xa, $Ya, $Xb, $Yb, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $Xa, $Ya, $Xc, $Yc, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $Xb, $Yb, $Xc, $Yc, $hPen) _GDIPlus_GraphicsDrawLine($hGraphics, $iX1, $iY1, $iArrowX, $iArrowY, $hPen) EndFunc;==>_GDIplus_GraphicsDrawArrow Func _AntiAlias($hGraphics, $iMode) Local $aResult = DllCall($ghGDIPDll, "int", "GdipSetSmoothingMode", "hwnd", $hGraphics, "int", $iMode) If @error Then Return SetError(@error, @extended, False) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc;==>_AntiAlias Func close() Exit EndFunc;==>close Func _ATan2($nY, $nX) Return SetError(0, 0, ATan($nY / $nX) + ((($nY <= 0) And ($nX < 0)) + (($nY > 0) And ($nX < 0)) - 2 * (($nY < 0) And ($nX < 0))) * 3.14159265358979323846) EndFunc;==>_ATan2 Edited October 20, 2008 by komalo [font="Palatino Linotype"][size="3"]AutoIt Script Examples :[/size][/font][font="Palatino Linotype"][size="3"]_CaptureBehindWindowGlass CMD for Windows Vista/Seven[/size][/font][left][/left][font="Palatino Linotype"][size="3"]Non AutoIt Script programs : Border Skin - Aero Glass On XP[/size][/font] Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now