Не получается нарисовать квадрат из кординат линий

Помощь в написании скриптов
flud
Posts: 11
Joined: 09 Aug 2015, 01:53

Не получается нарисовать квадрат из кординат линий

Post by flud » 15 Mar 2023, 13:20

Code: Select all

#SingleInstance Force
CoordMode "Mouse", "Screen"

*ESC::ExitApp
*f2::Reload
f1::
ArrayCountfix = -1
ArrayCount := 4
line_0 := [-8, -8, 8, -8]
line_1 := [8, -8, 8, 8]
line_2 := [8, 8, -8, 8]
line_3 := [-8, 8, -8, -8]

Loop %ArrayCount%
	{
		ArrayCountfix += 1
		MouseClickDrag L, line_%ArrayCountfix%[1], line_%ArrayCountfix%[2], line_%ArrayCountfix%[3], line_%ArrayCountfix%[4], 2, R		
	}
Return

скрипт рисует какую то дичь
notepad++_MbDft2ZOVj.png
notepad++_MbDft2ZOVj.png (23.63 KiB) Viewed 1048 times

garry
Posts: 3763
Joined: 22 Dec 2013, 12:50

Re: Не получается нарисовать квадрат из кординат линий

Post by garry » 15 Mar 2023, 16:17

Code: Select all

#Warn
#Requires AutoHotkey v1.1
#SingleInstance Force
CoordMode,Pixel,screen
Coordmode,mouse,screen
Run, mspaint.exe
WinWaitActive, ahk_class MSPaintApp,, 2
if ErrorLevel
    return
;---
$F9::
ArrayCountfix = -1
ArrayCount := 4

;--- drag only квадрат -----------------------
;/*
;---------------------
line_0:=[0,0,100,0]
line_1:=[0,0,0,100]
line_2:=[0,0,-100,0]
line_3:=[0,0,0,-100]
;---------------------
;*/

/*
;-- only move --------
;---------------------
line_0:=[100,0,0,0]
line_1:=[0,100,0,0]
line_2:=[-100,0,0,0]
line_3:=[0,-100,0,0]
;-----------------------
*/

Loop %ArrayCount%
	{
	ArrayCountfix ++
	MouseClickDrag L, line_%ArrayCountfix%[1], line_%ArrayCountfix%[2], line_%ArrayCountfix%[3], line_%ArrayCountfix%[4],4,R
    sleep,300  ;- for test		
	}
Return
;-----------------------------------
*ESC::ExitApp
*f2::Reload
;===================================
Last edited by garry on 17 Mar 2023, 04:41, edited 1 time in total.

flud
Posts: 11
Joined: 09 Aug 2015, 01:53

Re: Не получается нарисовать квадрат из кординат линий

Post by flud » 16 Mar 2023, 00:20

Видимо что то с моим экспортером, у меня поле 800х800, код проходит по всем линиями и сохраняет положение точек линий относительно центра
mspaint_IR4Edusw11.png
mspaint_IR4Edusw11.png (124.81 KiB) Viewed 1005 times
вот как он экспортирует простой квадрат, без минусовых значений.

Code: Select all

ArrayCount := 4
line_0 := [0, 0, 16, 0]
line_1 := [16, 0, 16, 16]
line_2 := [16, 16, 0, 16]
line_3 := [0, 16, 0, 0]
чуток покрасил код

Code: Select all

#SingleInstance Force
CoordMode "Mouse", "Screen"
#include arrays.ahk

*ESC::ExitApp
*f2::Reload

f1::
{	
	local count := ArrayCount
	while (0 < count) {
		count--
		line := line_%count%
		MouseClickDrag "Left", line[1], line[2], line[3], line[4], 0, "R"
	}
}
Return

flud
Posts: 11
Joined: 09 Aug 2015, 01:53

Re: Не получается нарисовать квадрат из кординат линий

Post by flud » 16 Mar 2023, 00:42

C эскпортом всё в порядке, что то не так с Relative у MouseClickDrag
Изменил чуток код и почти отлично стало (почти, потому что всё как в зеркале перевёрнуто :) )

Code: Select all

#SingleInstance Force
CoordMode "Mouse", "Screen"
#include arrays.ahk

*ESC::ExitApp
*f2::Reload

f1::
{	
	local count := ArrayCount
	MouseGetPos &xpos, &ypos
	while (0 < count) {
		count--
		line := line_%count%
		MouseClickDrag "Left", xpos - line[1], ypos - line[2], xpos - line[3], ypos - line[4], 0
	}
}
Return

mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Не получается нарисовать квадрат из кординат линий

Post by mcl » 16 Mar 2023, 19:27

flud wrote: скрипт рисует какую то дичь
Координаты у вас сохраняются относительно центра, а MouseClickDrag работает относительно текущего положения мыши.
После каждого MouseClickDrag положение мыши меняется, притом дважды: сперва – после сдвига (X1/Y1), потом – после отрисовки (X2/X2).

Code: Select all

#SingleInstance Force
CoordMode "Mouse", "Screen"

*ESC::ExitApp
*f2::Reload
f1::
ArrayCountfix = -1
ArrayCount := 4
line_0 := [-8, -8,  16,   0]  ; Сдвиг на пол-квадрата только в первом массиве. Линия горизонтальная (Y2=0)
line_1 := [ 0,  0,   0,  16]  ; Сдвига нет, продолжаем от места, где мышь остановилась. Линия вертикальная (X2=0)
line_2 := [ 0,  0, -16,   0]
line_3 := [ 0,  0,   0, -16]

Loop %ArrayCount%
	{
		ArrayCountfix += 1
		MouseClickDrag L, line_%ArrayCountfix%[1], line_%ArrayCountfix%[2], line_%ArrayCountfix%[3], line_%ArrayCountfix%[4], 2, R		
	}
Return
github://oGDIp - GDI+ wrapper for AHK v1.1

flud
Posts: 11
Joined: 09 Aug 2015, 01:53

Re: Не получается нарисовать квадрат из кординат линий

Post by flud » 29 Mar 2023, 09:50

Как лучше реализовать задумку?

Code: Select all

1:(-7, -9)(8, -8):1
2:(8, -8)(8, 8):1
3:(8, 8)(-8, 8):1
4:(-8, 8)(-8, -8):1
5:(16, 8)(16, -24):2
6:(16, -24)(48, -24):2
7:(48, -24)(48, 8):2
8:(48, 8)(16, 8):2
9:(56, 8)(56, -56):3
10:(56, -56)(120, -56):3
11:(120, -56)(120, 8):3
12:(120, 8)(56, 8):3
есть данный текстовый файл, первый символ это номер линий, векторы в : : это линия относительно центра, последняя цифра означает некий цвет кисти
Результат тоже выглядить так, как видно первый белый куб находиться прямо по центру
Godot.png
Godot.png (3.52 KiB) Viewed 839 times

serzh82saratov
Posts: 137
Joined: 01 Jul 2017, 03:04

Re: Не получается нарисовать квадрат из кординат линий

Post by serzh82saratov » 30 Mar 2023, 02:02

для построения прямоугольника если он не под углом, достаточно двух точек
1:(-7, -9)(-8, -8):1
линии вычислить не так уж трудно

flud
Posts: 11
Joined: 09 Aug 2015, 01:53

Re: Не получается нарисовать квадрат из кординат линий

Post by flud » 30 Mar 2023, 05:08

а у меня не только прямугольники, можно по пикселям рисовать, просто это всегда линия.

Вот другая картинка
Spoiler

Code: Select all

1:(-8, -24)(-8, 0):4
2:(0, -16)(-8, -16):4
3:(0, -16)(0, 0):4
4:(-24, 0)(-24, -16):4
5:(-24, -16)(-16, -24):4
6:(-16, -24)(-16, 0):4
7:(-24, -8)(-16, -8):4
8:(8, -24)(8, 0):4
9:(8, -8)(16, -24):4
10:(8, -8)(16, 0):4
11:(-32, -16)(-16, -32):2
12:(-16, -32)(0, -32):2
13:(0, -32)(1, -21):2
14:(1, -21)(4, -21):2
15:(4, -21)(4, -32):2
16:(4, -32)(8, -32):2
17:(8, -32)(32, -32):2
18:(32, -32)(16, -8):2
19:(16, -8)(24, 0):2
20:(24, 0)(24, 8):2
21:(24, 8)(-32, 8):2
22:(-32, 8)(-32, -16):2
23:(32, -32)(64, -32):3
24:(24, -16)(64, -16):3
25:(24, 0)(64, 0):3
26:(24, 8)(64, 8):3
27:(-48, -24)(64, 8):1
28:(-24, -48)(64, 8):1
29:(-64, -32)(-62, -32):1
30:(-45, -38)(-43, -38):1
31:(-23, -46)(-21, -46):1
32:(0, -48)(2, -48):1
33:(26, -39)(28, -39):1
34:(38, -55)(40, -55):1
35:(59, -43)(61, -43):1
36:(67, -22)(69, -22):1
37:(43, -9)(45, -9):1
38:(32, 25)(34, 25):1
39:(-10, 20)(-8, 20):1
40:(-56, 5)(-54, 5):1
41:(-49, -21)(-47, -21):1
42:(-31, -66)(-29, -66):1
43:(11, -57)(13, -57):1
44:(82, 6)(84, 6):1
45:(58, 28)(60, 28):1
46:(29, 46)(31, 46):1
47:(-4, 41)(-2, 41):1
48:(-38, 31)(-36, 31):1

flud
Posts: 11
Joined: 09 Aug 2015, 01:53

Re: Не получается нарисовать квадрат из кординат линий

Post by flud » 30 Mar 2023, 11:04

упростил формат обычный csv

Code: Select all

1,-10,0,0,-25,1
2,0,-25,7,0,1
3,5,-10,-6,-10,1
4,5,-25,14,0,2
5,11,-13,23,-13,2
6,18,-24,29,-2,2
7,22,-24,34,0,4
8,29,-12,32,-26,4
9,32,-13,42,-4,4
10,-9,-33,38,-54,1
11,19,-35,62,-47,1
12,43,-17,72,-28,1
13,49,15,83,-11,1
14,-1,15,35,9,1
15,-16,-56,-16,40,4
16,-16,40,88,40,4
17,88,40,88,-64,4
18,88,-64,-16,-64,4
19,-16,-72,96,-72,3
20,96,-72,96,48,3
21,96,48,-24,48,3
22,-24,48,-24,-56,3
23,-16,-80,104,-80,2
24,104,-80,104,56,2
25,104,56,-32,56,2
26,-32,56,-32,-56,2
RobotMouse_csHhyc5d6h.png
RobotMouse_csHhyc5d6h.png (4.57 KiB) Viewed 799 times

Post Reply

Return to “Помощь”