Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
314
Task/Draw-a-rotating-cube/AutoHotkey/draw-a-rotating-cube.ahk
Normal file
314
Task/Draw-a-rotating-cube/AutoHotkey/draw-a-rotating-cube.ahk
Normal file
|
|
@ -0,0 +1,314 @@
|
|||
; ---------------------------------------------------------------
|
||||
cubeSize := 200
|
||||
deltaX := A_ScreenWidth/2
|
||||
deltaY := A_ScreenHeight/2
|
||||
keyStep := 1
|
||||
mouseStep := 0.2
|
||||
zoomStep := 1.1
|
||||
playSpeed := 1
|
||||
playTimer := 10
|
||||
penSize := 5
|
||||
|
||||
/*
|
||||
HotKeys:
|
||||
!p:: Play/Stop
|
||||
!x:: change play to x-axis
|
||||
!y:: change play to y-axis
|
||||
!z:: change play to z-axis
|
||||
!NumpadAdd:: Zoom in
|
||||
!WheelUp:: Zoom in
|
||||
!NumpadSub:: Zoom out
|
||||
!WheelDown:: Zoom out
|
||||
!LButton:: Rotate X-axis, follow mouse
|
||||
!Up:: Rotate X-axis, CCW
|
||||
!Down:: Rotate X-axis, CW
|
||||
!LButton:: Rotate Y-axis, follow mouse
|
||||
!Right:: Rotate Y-axis, CCW
|
||||
!Left:: Rotate Y-axis, CW
|
||||
!RButton:: Rotate Z-axis, follow mouse
|
||||
!PGUP:: Rotate Z-axis, CW
|
||||
!PGDN:: Rotate Z-axis, CCW
|
||||
+LButton:: Move, follow mouse
|
||||
^esc:: Exitapp
|
||||
*/
|
||||
visualCube =
|
||||
(
|
||||
1+--------+5
|
||||
|\ \
|
||||
| 2+--------+6
|
||||
| | |
|
||||
3+ | 7+ |
|
||||
\ | |
|
||||
4+--------+8
|
||||
)
|
||||
|
||||
SetBatchLines, -1
|
||||
coord := cubeSize/2
|
||||
nodes :=[[-coord, -coord, -coord]
|
||||
, [-coord, -coord, coord]
|
||||
, [-coord, coord, -coord]
|
||||
, [-coord, coord, coord]
|
||||
, [ coord, -coord, -coord]
|
||||
, [ coord, -coord, coord]
|
||||
, [ coord, coord, -coord]
|
||||
, [ coord, coord, coord]]
|
||||
|
||||
edges := [[1, 2], [2, 4], [4, 3], [3, 1]
|
||||
, [5, 6], [6, 8], [8, 7], [7, 5]
|
||||
, [1, 5], [2, 6], [3, 7], [4, 8]]
|
||||
|
||||
faces := [[1,2,4,3], [2,4,8,6], [1,2,6,5], [1,3,7,5], [5,7,8,6], [3,4,8,7]]
|
||||
|
||||
CP := [(nodes[8,1]+nodes[1,1])/2 , (nodes[8,2]+nodes[1,2])/2]
|
||||
|
||||
rotateX3D(-30)
|
||||
rotateY3D(30)
|
||||
Gdip1()
|
||||
draw()
|
||||
return
|
||||
|
||||
; --------------------------------------------------------------
|
||||
draw() {
|
||||
global
|
||||
D := ""
|
||||
for i, n in nodes
|
||||
D .= Sqrt((n.1-CP.1)**2 + (n.2-CP.2)**2) "`t:" i ":`t" n.3 "`n"
|
||||
Sort, D, N
|
||||
p1 := StrSplit(StrSplit(D, "`n", "`r").1, ":").2
|
||||
p2 := StrSplit(StrSplit(D, "`n", "`r").2, ":").2
|
||||
hiddenNode := nodes[p1,3] < nodes[p2,3] ? p1 : p2
|
||||
|
||||
; Draw Faces
|
||||
loop % faces.count() {
|
||||
n1 := faces[A_Index, 1]
|
||||
n2 := faces[A_Index, 2]
|
||||
n3 := faces[A_Index, 3]
|
||||
n4 := faces[A_Index, 4]
|
||||
if (n1 = hiddenNode) || (n2 = hiddenNode) || (n3 = hiddenNode) || (n4 = hiddenNode)
|
||||
continue
|
||||
points := nodes[n1,1]+deltaX "," nodes[n1,2]+deltaY
|
||||
. "|" nodes[n2,1]+deltaX "," nodes[n2,2]+deltaY
|
||||
. "|" nodes[n3,1]+deltaX "," nodes[n3,2]+deltaY
|
||||
. "|" nodes[n4,1]+deltaX "," nodes[n4,2]+deltaY
|
||||
Gdip_FillPolygon(G, FaceBrush%A_Index%, Points)
|
||||
}
|
||||
|
||||
; Draw Node-Numbers
|
||||
;~ loop % nodes.count() {
|
||||
;~ Gdip_FillEllipse(G, pBrush, nodes[A_Index, 1]+deltaX, nodes[A_Index, 2]+deltaY, 4, 4)
|
||||
;~ Options := "x" nodes[A_Index, 1]+deltaX " y" nodes[A_Index, 2]+deltaY "c" TextColor " Bold s" size
|
||||
;~ Gdip_TextToGraphics(G, A_Index, Options, Font)
|
||||
;~ }
|
||||
|
||||
; Draw Edges
|
||||
loop % edges.count() {
|
||||
n1 := edges[A_Index, 1]
|
||||
n2 := edges[A_Index, 2]
|
||||
if (n1 = hiddenNode) || (n2 = hiddenNode)
|
||||
continue
|
||||
Gdip_DrawLine(G, pPen, nodes[n1,1]+deltaX, nodes[n1,2]+deltaY, nodes[n2,1]+deltaX, nodes[n2,2]+deltaY)
|
||||
}
|
||||
UpdateLayeredWindow(hwnd1, hdc, 0, 0, Width, Height)
|
||||
}
|
||||
|
||||
; ---------------------------------------------------------------
|
||||
rotateZ3D(theta) { ; Rotate shape around the z-axis
|
||||
global
|
||||
theta *= 3.141592653589793/180
|
||||
sinTheta := sin(theta)
|
||||
cosTheta := cos(theta)
|
||||
loop % nodes.count() {
|
||||
x := nodes[A_Index,1]
|
||||
y := nodes[A_Index,2]
|
||||
nodes[A_Index,1] := x*cosTheta - y*sinTheta
|
||||
nodes[A_Index,2] := y*cosTheta + x*sinTheta
|
||||
}
|
||||
Redraw()
|
||||
}
|
||||
|
||||
; ---------------------------------------------------------------
|
||||
rotateX3D(theta) { ; Rotate shape around the x-axis
|
||||
global
|
||||
theta *= 3.141592653589793/180
|
||||
sinTheta := sin(theta)
|
||||
cosTheta := cos(theta)
|
||||
loop % nodes.count() {
|
||||
y := nodes[A_Index, 2]
|
||||
z := nodes[A_Index, 3]
|
||||
nodes[A_Index, 2] := y*cosTheta - z*sinTheta
|
||||
nodes[A_Index, 3] := z*cosTheta + y*sinTheta
|
||||
}
|
||||
Redraw()
|
||||
}
|
||||
|
||||
; ---------------------------------------------------------------
|
||||
rotateY3D(theta) { ; Rotate shape around the y-axis
|
||||
global
|
||||
theta *= 3.141592653589793/180
|
||||
sinTheta := sin(theta)
|
||||
cosTheta := cos(theta)
|
||||
loop % nodes.count() {
|
||||
x := nodes[A_Index, 1]
|
||||
z := nodes[A_Index, 3]
|
||||
nodes[A_Index, 1] := x*cosTheta + z*sinTheta
|
||||
nodes[A_Index, 3] := z*cosTheta - x*sinTheta
|
||||
}
|
||||
Redraw()
|
||||
}
|
||||
|
||||
; ---------------------------------------------------------------
|
||||
Redraw(){
|
||||
global
|
||||
gdip2()
|
||||
gdip1()
|
||||
draw()
|
||||
}
|
||||
|
||||
; ---------------------------------------------------------------
|
||||
gdip1(){
|
||||
global
|
||||
If !pToken := Gdip_Startup()
|
||||
{
|
||||
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
|
||||
ExitApp
|
||||
}
|
||||
OnExit, Exit
|
||||
Width := A_ScreenWidth, Height := A_ScreenHeight
|
||||
Gui, 1: -Caption +E0x80000 +LastFound +OwnDialogs +Owner +AlwaysOnTop
|
||||
Gui, 1: Show, NA
|
||||
hwnd1 := WinExist()
|
||||
hbm := CreateDIBSection(Width, Height)
|
||||
hdc := CreateCompatibleDC()
|
||||
obm := SelectObject(hdc, hbm)
|
||||
G := Gdip_GraphicsFromHDC(hdc)
|
||||
Gdip_SetSmoothingMode(G, 4)
|
||||
TextColor:="FFFFFF00", size := 18
|
||||
Font := "Arial"
|
||||
Gdip_FontFamilyCreate(Font)
|
||||
pBrush := Gdip_BrushCreateSolid(0xFFFF00FF)
|
||||
FaceBrush1 := Gdip_BrushCreateSolid(0xFF0000FF) ; blue
|
||||
FaceBrush2 := Gdip_BrushCreateSolid(0xFFFF0000) ; red
|
||||
FaceBrush3 := Gdip_BrushCreateSolid(0xFFFFFF00) ; yellow
|
||||
FaceBrush4 := Gdip_BrushCreateSolid(0xFFFF7518) ; orange
|
||||
FaceBrush5 := Gdip_BrushCreateSolid(0xFF00FF00) ; lime
|
||||
FaceBrush6 := Gdip_BrushCreateSolid(0xFFFFFFFF) ; white
|
||||
pPen := Gdip_CreatePen(0xFF000000, penSize)
|
||||
}
|
||||
|
||||
; ---------------------------------------------------------------
|
||||
gdip2(){
|
||||
global
|
||||
Gdip_DeleteBrush(pBrush)
|
||||
Gdip_DeletePen(pPen)
|
||||
SelectObject(hdc, obm)
|
||||
DeleteObject(hbm)
|
||||
DeleteDC(hdc)
|
||||
Gdip_DeleteGraphics(G)
|
||||
}
|
||||
; Viewing Hotkeys ----------------------------------------------
|
||||
; HotKey Play/Stop ---------------------------------------------
|
||||
!p::
|
||||
SetTimer, rotateTimer, % (toggle:=!toggle)?playTimer:"off"
|
||||
return
|
||||
|
||||
rotateTimer:
|
||||
axis := !axis ? "Y" : axis
|
||||
rotate%axis%3D(playSpeed)
|
||||
return
|
||||
|
||||
!x::
|
||||
!y::
|
||||
!z::
|
||||
axis := SubStr(A_ThisHotkey, 2, 1)
|
||||
return
|
||||
|
||||
; HotKey Zoom in/out -------------------------------------------
|
||||
!NumpadAdd::
|
||||
!NumpadSub::
|
||||
!WheelUp::
|
||||
!WheelDown::
|
||||
loop % nodes.count()
|
||||
{
|
||||
nodes[A_Index, 1] := nodes[A_Index, 1] * (InStr(A_ThisHotkey, "Add") || InStr(A_ThisHotkey, "Up") ? zoomStep : 1/zoomStep)
|
||||
nodes[A_Index, 2] := nodes[A_Index, 2] * (InStr(A_ThisHotkey, "Add") || InStr(A_ThisHotkey, "Up") ? zoomStep : 1/zoomStep)
|
||||
nodes[A_Index, 3] := nodes[A_Index, 3] * (InStr(A_ThisHotkey, "Add") || InStr(A_ThisHotkey, "Up") ? zoomStep : 1/zoomStep)
|
||||
}
|
||||
Redraw()
|
||||
return
|
||||
|
||||
; HotKey Rotate around Y-Axis ----------------------------------
|
||||
!Right::
|
||||
!Left::
|
||||
rotateY3D(keyStep * (InStr(A_ThisHotkey,"right") ? 1 : -1))
|
||||
return
|
||||
|
||||
; HotKey Rotate around X-Axis ----------------------------------
|
||||
!Up::
|
||||
!Down::
|
||||
rotateX3D(keyStep * (InStr(A_ThisHotkey, "Up") ? 1 : -1))
|
||||
return
|
||||
|
||||
; HotKey Rotate around Z-Axis ----------------------------------
|
||||
!PGUP::
|
||||
!PGDN::
|
||||
rotateZ3D(keyStep * (InStr(A_ThisHotkey, "UP") ? 1 : -1))
|
||||
return
|
||||
|
||||
; HotKey, Rotate around X/Y-Axis -------------------------------
|
||||
!LButton::
|
||||
MouseGetPos, pmouseX, pmouseY
|
||||
while GetKeyState("Lbutton", "P")
|
||||
{
|
||||
MouseGetPos, mouseX, mouseY
|
||||
DeltaMX := mouseX - pmouseX
|
||||
DeltaMY := pmouseY - mouseY
|
||||
if (DeltaMX || DeltaMY)
|
||||
{
|
||||
MouseGetPos, pmouseX, pmouseY
|
||||
rotateY3D(DeltaMX)
|
||||
rotateX3D(DeltaMY)
|
||||
}
|
||||
}
|
||||
return
|
||||
|
||||
; HotKey Rotate around Z-Axis ----------------------------------
|
||||
!RButton::
|
||||
MouseGetPos, pmouseX, pmouseY
|
||||
while GetKeyState("Rbutton", "P")
|
||||
{
|
||||
MouseGetPos, mouseX, mouseY
|
||||
DeltaMX := mouseX - pmouseX
|
||||
DeltaMY := mouseY - pmouseY
|
||||
DeltaMX *= mouseY < deltaY ? mouseStep : -mouseStep
|
||||
DeltaMY *= mouseX > deltaX ? mouseStep : -mouseStep
|
||||
if (DeltaMX || DeltaMY)
|
||||
{
|
||||
MouseGetPos, pmouseX, pmouseY
|
||||
rotateZ3D(DeltaMX)
|
||||
rotateZ3D(DeltaMY)
|
||||
}
|
||||
}
|
||||
return
|
||||
|
||||
; HotKey, Move -------------------------------------------------
|
||||
+LButton::
|
||||
MouseGetPos, pmouseX, pmouseY
|
||||
while GetKeyState("Lbutton", "P")
|
||||
{
|
||||
MouseGetPos, mouseX, mouseY
|
||||
deltaX += mouseX - pmouseX
|
||||
deltaY += mouseY - pmouseY
|
||||
pmouseX := mouseX
|
||||
pmouseY := mouseY
|
||||
Redraw()
|
||||
}
|
||||
return
|
||||
|
||||
; ---------------------------------------------------------------
|
||||
^esc::
|
||||
Exit:
|
||||
gdip2()
|
||||
Gdip_Shutdown(pToken)
|
||||
ExitApp
|
||||
Return
|
||||
; ---------------------------------------------------------------
|
||||
Loading…
Add table
Add a link
Reference in a new issue