Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Coordinate conversion
- polar(OffX,OffY) {
- Deg:=90/asin(1)*atan(OffY/OffX)
- if(OffX<0) {
- Deg+=180
- }
- if(Deg<0) {
- Deg+=360
- }
- Return Deg
- }
- cartesian(R,Deg,Xref,Yref) {
- pX:=Xref+R*(cos(asin(1)/90*Deg))
- pY:=Yref+R*(sin(asin(1)/90*Deg))
- Return [pX,pY]
- }
- ;Clicks per degree / per pixel, always uses the one that results in less clicks
- CPD:=0.8
- CPP:=0.05
- CoordMode, Mouse, Screen
- SetTitleMatchMode, 2
- RC:=[]
- ;Ctrl+Shift+Click to use tool, click three points and it will draw a semicircle through them
- +^LButton::
- MouseGetPos, xpos, ypos
- Coords:={"X":xpos,"Y":ypos}
- RC.push(Coords)
- if(RC.Length()>2) {
- M1:=-(RC.2.X-RC.1.X)/(RC.2.Y-RC.1.Y)
- C1:=(0.5*(RC.1.Y+RC.2.Y)-M1*0.5*(RC.1.X+RC.2.X))
- M2:=-(RC.3.X-RC.2.X)/(RC.3.Y-RC.2.Y)
- C2:=(0.5*(RC.2.Y+RC.3.Y)-M2*0.5*(RC.2.X+RC.3.X))
- X:=((C2-C1)/(M1-M2))
- Y:=(M1*X+C1)
- R:=sqrt((RC.1.X-X)**(2)+(RC.1.Y-Y)**(2))
- PC:=[polar(RC.1.X-X,RC.1.Y-Y),polar(RC.2.X-X,RC.2.Y-Y),polar(RC.3.X-X,RC.3.Y-Y)]
- if(((90/asin(1)*atan(1/CPP/R))>(1/CPD))&&(CPP>0)) {
- C:=(90/asin(1)*atan(1/CPP/R))
- } else {
- C:=1/CPD
- }
- if((PC.1<PC.2)&&(PC.2<PC.3)) {
- S:=PC.1
- E:=PC.3
- }
- if(((PC.1<PC.3)&&(PC.3<PC.2))||((PC.2<PC.1)&&(PC.1<PC.3))) {
- S:=PC.3
- E:=PC.1 +360
- }
- if(((PC.2<PC.3)&&(PC.3<PC.1))||((PC.3<PC.1)&&(PC.1<PC.2))) {
- S:=PC.1
- E:=PC.3 +360
- }
- if((PC.3<PC.2)&&(PC.2<PC.1)) {
- S:=PC.3
- E:=PC.1
- }
- Send, {Shift up} {Ctrl up}
- While(S<E) {
- cX:=cartesian(R,S,X,Y)[1]
- cY:=cartesian(R,S,X,Y)[2]
- Click, %cX%, %cY%
- S += C
- }
- RC:=[]
- }
- Return
- ;Ctrl+Shift+Escape to emergency shutoff in case it gets stuck
- +^Esc::
- Msgbox, Exit
- ExitApp
- Return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement