davidkim Posted May 3, 2012 Share Posted May 3, 2012 (edited) To see sample images[Autoit] has written a sample codethis my code -> code Previewside gearcenter gearSmall side gearmy codeexpandcollapse popup#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_icon=C:AutoIt3Aut2ExeIconsSETUP09.ICO #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #Include <GDIPlus.au3> #Include <WindowsConstants.au3> FileInstall('.g_back.png',@ScriptDir & 'g_back.png',1) FileInstall('.g_center.png',@ScriptDir & 'g_center.png',1) FileInstall('.g_left.png',@ScriptDir & 'g_left.png',1) FileInstall('.g_side.png',@ScriptDir & 'g_side.png',1) Global Const $tagBITMAP = 'long bmType;long bmWidth;long bmHeight;long bmWidthBytes;ushort bmPlanes;ushort bmBitsPixel;ptr bmBits;' _GDIPlus_Startup() $hBackground = _GDIPlus_ImageLoadFromFile(@ScriptDir & 'g_back.png') $center = _GDIPlus_ImageLoadFromFile(@ScriptDir & 'g_center.png') $g_left = _GDIPlus_ImageLoadFromFile(@ScriptDir & 'g_left.png') $g_side = _GDIPlus_ImageLoadFromFile(@ScriptDir & 'g_side.png') $State = Default ; GUI Form $hForm = GUICreate('', 600, 600, -1, -1, $WS_POPUPWINDOW, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST)) GUISetState() ; Moveable GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST") ; Exit key => ESC HotKeySet("{ESC}",'_exit_') HotKeySet("{END}",'_play_') Global $ct = 0 Global Const $nPI = 3.1415926535897932384626433832795 Global Const $PiDiv = $nPI /180 Global $ii For $angle = 1 to 360 ;step 20 _Movement($angle) Next While 1 Sleep(30) WEnd Func _exit_() _GDIPlus_Shutdown() Exit EndFunc Func _play_() If $ct > 360 Then $ct = 0 $ct+=1 _Movement($ct) EndFunc ; form move Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam) If ($hWnd = $hForm) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION EndFunc ;==>WM_NCHITTEST Func _Move_($graph, $png, $PngCenterX, $PngCenterY, $rAngle,$x,$y,$sw) If $sw = 1 Then $rAngle = 0 - $rAngle Local $status = DllCall($ghGDIPDll, "int", "GdipRotateWorldTransform", "hwnd", $graph, "float", $rAngle, "int", 1) $status = DllCall($ghGDIPDll, "int", "GdipTranslateWorldTransform", "hwnd", $graph, "float",$x, "float", $y, "int", 1) $mx = -$PngCenterX - ($rAngle = 180) $my = -$PngCenterY - ($rAngle = 180) $mw = _GDIPlus_ImageGetWidth($png) $mh = _GDIPlus_ImageGetHeight($png) _GDIPlus_GraphicsDrawImageRect($graph, $png, $mx, $my,$mw, $mh) $status = DllCall($ghGDIPDll, "int", "GdipResetWorldTransform", "hwnd", $graph) EndFunc ;==>_DrawNeedle Func _Movement($rAngle) Local $hGraphic, $hImage $hImage = _GDIPlus_ImageClone($hBackground) $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage) ;~ 반지름,반지름 x+반지름,y+반지름 ;gear ct center(22) ;gear ct left (14) ;gear ct side (50) ; Side 1' 회전할때..center 2.2727272727272727272727272727273x / left 3.5714285714285714285714285714286x rotate _Move_($hGraphic, $g_side, 300,300, $rAngle,300,300,1) ; /// side gear $center_angle= $rAngle * 2.2727272727272727272727272727273 _Move_($hGraphic, $center, 123,123, $center_angle,178+123,176+123,0) ; /// center gear $left_angle = $rAngle * 3.5714285714285714285714285714286 _Move_($hGraphic, $g_left, 82,82, $left_angle,58+82,128+82,1) ; /// g_left gear _Move_($hGraphic, $g_left, 82,82, $left_angle,377+82,127+82,1) ; /// g_left gear _Move_($hGraphic, $g_left, 82,82, $left_angle,218+82,404+82,1) ; /// g_left gear _WinAPI_UpdateLayeredWindowEx($hForm, _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage), 255, 1) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_ImageDispose($hImage) Sleep(20) EndFunc ;==>_Movement Func _GDIPlus_ImageClone($hImage) Local $aResult = DllCall($ghGDIPDll, 'uint', 'GdipCloneImage', 'ptr', $hImage, 'ptr*', 0) If @error Then Return SetError(1, 0, 0) Else If $aResult[0] Then Return SetError($aResult[0], 0, 0) EndIf EndIf Return $aResult[2] EndFunc ;==>_GDIPlus_ImageClone Func _WinAPI_UpdateLayeredWindowEx($hWnd, $hBitmap, $iOpacity = 255, $fDelete = 0) Local $Ret, $tSIZE, $tPOINT, $tBLENDFUNCTION, $hDC, $hDestDC, $hDestSv $Ret = DllCall('user32.dll', 'hwnd', 'GetDC', 'hwnd', $hWnd) $hDC = $Ret[0] $Ret = DllCall('gdi32.dll', 'hwnd', 'CreateCompatibleDC', 'hwnd', $hDC) $hDestDC = $Ret[0] $Ret = DllCall('gdi32.dll', 'hwnd', 'SelectObject', 'hwnd', $hDestDC, 'ptr', $hBitmap) $hDestSv = $Ret[0] $tSIZE = _WinAPI_GetBitmapDimension($hBitmap) $tPOINT = DllStructCreate($tagPOINT) $tBLENDFUNCTION = DllStructCreate($tagBLENDFUNCTION) DllStructSetData($tBLENDFUNCTION, 'Alpha', $iOpacity) DllStructSetData($tBLENDFUNCTION, 'Format', 1) $Ret = DllCall('user32.dll', 'int', 'UpdateLayeredWindow', 'hwnd', $hWnd, 'hwnd', $hDC, 'ptr', 0, 'ptr', DllStructGetPtr($tSIZE), 'hwnd', $hDestDC, 'ptr', DllStructGetPtr($tPOINT), 'dword', 0, 'ptr', DllStructGetPtr($tBLENDFUNCTION), 'dword', 0x02) DllCall('user32.dll', 'int', 'ReleaseDC', 'hwnd', $hWnd, 'hwnd', $hDC) DllCall('gdi32.dll', 'ptr', 'SelectObject', 'hwnd', $hDestDC, 'ptr', $hDestSv) DllCall('gdi32.dll', 'int', 'DeleteDC', 'hwnd', $hDestDC) If Not $Ret[0] Then Return SetError(1, 0, 0) EndIf If $fDelete Then _WinAPI_DeleteObject($hBitmap) EndIf Return 1 EndFunc ;==>_WinAPI_UpdateLayeredWindowEx Func _WinAPI_GetBitmapDimension($hBitmap) Local $tObj = DllStructCreate($tagBITMAP) Local $Ret = DllCall('gdi32.dll', 'int', 'GetObject', 'int', $hBitmap, 'int', DllStructGetSize($tObj), 'ptr', DllStructGetPtr($tObj)) If (@error) Or (Not $Ret[0]) Then Return SetError(1, 0, 0) EndIf Local $tSIZE = DllStructCreate($tagSIZE) DllStructSetData($tSIZE, 1, DllStructGetData($tObj, 'bmWidth')) DllStructSetData($tSIZE, 2, DllStructGetData($tObj, 'bmHeight')) Return $tSIZE EndFunc ;==>_WinAPI_GetBitmapDimensionHow small side while rotating the gearRotation in the desired direction at the same time possible?Preview movie -> moviePreview movie viewing install codechttp://www.2shared.com/file/EHpqiI3H/BDCAMSETUP_KOR.html_Move_($hGraphic, $g_left, 82,82, $left_angle,58+82,128+82,1) ; /// g_left gear_Move_($hGraphic, $g_left, 82,82, $left_angle,377+82,127+82,1) ; /// g_left gear_Move_($hGraphic, $g_left, 82,82, $left_angle,218+82,404+82,1) ; /// g_left gear--- edit code_Move_($hGraphic, $g_left, 82+200,82+200, $left_angle,58+82,128+82,1) ; /// g_left gear_Move_($hGraphic, $g_left, 82+200,82+200, $left_angle,377+82,127+82,1) ; /// g_left gear_Move_($hGraphic, $g_left, 82+200,82+200, $left_angle,218+82,404+82,1) ; /// g_left gearIncreasing the number on the syntax.Rotation while rotating in the direction you want, but ...Are abnormally rotated. Edited May 4, 2012 by davidkim I interest am many quite in AutoitScript.From that is [http://cafe.naver.com/autoitscript[/color]] Korea of cafe(blog) to be operating, [size="2"][color="#ff00ff"]English cannot well[/size].Many help it requests.To read, it stands it thanks. Link to comment Share on other sites More sharing options...
UEZ Posted May 3, 2012 Share Posted May 3, 2012 (edited) Try this here:Source Code too long: http://pastebin.com/FnxsCiLxBr,UEZ Edited May 3, 2012 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
davidkim Posted May 4, 2012 Author Share Posted May 4, 2012 (edited) Try this here: Source Code too long: http://pastebin.com/FnxsCiLx Br, UEZ Thank you. UEZ. With the rotation of the object [_g_leftpng] is... Thus, the inside of [_g_sidepng] Should be rotated clockwise. Modify your source Simplicity and good. However, in the direction I want does not move. green arrow Is my question. and the form should be transparent. Global Const $hGUI = GUICreate("GDI+ Gears Rotation Simulation by UEZ 2012", $iW_G1, $iH_G1) Thank's UEZ. Edited May 4, 2012 by davidkim I interest am many quite in AutoitScript.From that is [http://cafe.naver.com/autoitscript[/color]] Korea of cafe(blog) to be operating, [size="2"][color="#ff00ff"]English cannot well[/size].Many help it requests.To read, it stands it thanks. Link to comment Share on other sites More sharing options...
UEZ Posted May 4, 2012 Share Posted May 4, 2012 (edited) Here the new version: http://pastebin.com/Crd9mfR2Is this what you want?What is still missing is the mathematics behind the calculation for the rotation of the smallest gear. When I find the formula for line 77 I will post it.Br,UEZ Edited May 4, 2012 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
davidkim Posted May 5, 2012 Author Share Posted May 5, 2012 Here the new version: http://pastebin.com/Crd9mfR2Is this what you want?What is still missing is the mathematics behind the calculation for the rotation of the smallest gear. When I find the formula for line 77 I will post it.Br,UEZg_left rotation wantThanks UEZ I interest am many quite in AutoitScript.From that is [http://cafe.naver.com/autoitscript[/color]] Korea of cafe(blog) to be operating, [size="2"][color="#ff00ff"]English cannot well[/size].Many help it requests.To read, it stands it thanks. 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