Помощь - Поиск - Пользователи - Календарь
Полная версия: Рисуем с помощью пилота
UoKit.com Форумы > Кликер > UO Pilot
FREEON
Можно ли с помощью пилота создать bmp картинку и на ней же к примеру расчертить сетку с определенным шагом по оси X и шагом по оси Y. Задав нужный цвет. Видел что что-то подобное реализовано в закрашивании фона... Если к примеру нельзя создать картинку, то хотя можно ли выполнить поставленную задачу(расчертить сетку) на готовой пустой картинке?
cirus
Сделать можно, но будет долго рисовать.
Для этого есть фотошоп. Создаётся узор и накладывается на картинку.
На крайний случай открыть картинку в paint'е и скриптом нарисовать сетку.
Fors1k
Цитата(FREEON @ 26.6.2019, 14:34) *

Можно ли с помощью пилота расчертить сетку


Если сетка в paint'е устроит
код

Код
set workwindow 10489422
set linedelay 1
//
set #sx 1780        // размер листа Х
set #sy 760         // размер листа У
set #xh 24          // Шаг по Х
set #yh 10          // Шаг по У
init_arr %a (1) 5 5 // координаты первого пикселя
//
  set #x %a [1 1]
  set #y %a [1 1]
repeat (#sx / #xh)
    set #x (#x + #xh)
    kleft_down #x %a[1 1]
    wait 10
    move #x #sy
    wait 10
    kleft_up #x #sy
end_repeat
repeat (#sy / #yh)
    set #y (#y + #yh)
    kleft_down %a[1 1] #y
    wait 10
    move #sx #y
    wait 10
    kleft_up #sx #y
end_repeat
end_script

Cockney
Цитата(cirus @ 26.6.2019, 14:49) *

Сделать можно, но будет долго рисовать.




Но это же на пилотовском языке ? А луа ? Думаю не хуже будет, там же поиск работает быстрее чем встроенная функция.
cirus
Цитата
можно ли выполнить поставленную задачу(расчертить сетку) на готовой пустой картинке?

Код
--lua
local ffi=require "ffi"
local cc=ffi.cast

local path_in=[[C:\1.bmp]]  -- путь к картинке
local path_out=[[C:\2.bmp]] -- путь куда сохранить картинку с сеткой
local setkaX, setkaY = 5, 5  -- размеры сетки
local setkaR, setkaG, setkaB = 255, 0, 255  -- цвет сетки в ргб

local address, width, height, length = loadimage(path_in)   -- загрузить картинку
if address > 0 then  -- если загружена
    for y=0, height-1  do
        for x=0, length-3, 3 do
            if  x % setkaX == 0 or y % setkaY == 0 then
                cc("unsigned char*", address + x + y * length)[0]=setkaB
                cc("unsigned char*", address + x + y * length+1)[0]=setkaG
                cc("unsigned char*", address + x + y * length+2)[0]=setkaR
            end
        end
    end
saveimage(address, path_out)    -- сохранить картинку
else log("Картинка не найдена")
end
FREEON
Цитата(cirus @ 27.6.2019, 3:00) *

Код
--lua
local ffi=require "ffi"
local cc=ffi.cast

local path_in=[[C:\1.bmp]]  -- путь к картинке
local path_out=[[C:\2.bmp]] -- путь куда сохранить картинку с сеткой
local setkaX, setkaY = 5, 5  -- размеры сетки
local setkaR, setkaG, setkaB = 255, 0, 255  -- цвет сетки в ргб

local address, width, height, length = loadimage(path_in)   -- загрузить картинку
if address > 0 then  -- если загружена
    for y=0, height-1  do
        for x=0, length-3, 3 do
            if  x % setkaX == 0 or y % setkaY == 0 then
                cc("unsigned char*", address + x + y * length)[0]=setkaB
                cc("unsigned char*", address + x + y * length+1)[0]=setkaG
                cc("unsigned char*", address + x + y * length+2)[0]=setkaR
            end
        end
    end
saveimage(address, path_out)    -- сохранить картинку
else log("Картинка не найдена")
end


Да благодарю отфотошопил. Похоже для луа нужен какой-то плагин(файл)?
Цитата

module 'ffi' not found:
no field package.preload['ffi']
no file '.\ffi.lua'
no file 'D:\UOPilot\lua\ffi.lua'
no file 'D:\UOPilot\lua\ffi\init.lua'
no file 'D:\UOPilot\ffi.lua'
no file 'D:\UOPilot\ff

cirus
Цитата
Похоже для луа нужен какой-то плагин(файл)?

Пилот нужен 2.41.
FREEON
Цитата(cirus @ 27.6.2019, 21:52) *

Пилот нужен 2.41.

Да как бы: UoPilot Version 2.41 (31.12.2018) и lua5.1.dll имеется
FREEON
Версии 2.41 оказалось мало. Немного покопавшись выяснилось что дело было в lua.dll а именно ffi которой просто нет, зато она есть в luajit.
Заменил стандартную пилотовскую библиотеку на версию из LuaJIT и все заработало (разница в 300KB).
cirus
Цитата
Версии 2.41 оказалось мало.

Стандартной длл хватает. Она распаковывается при первом запуска пилота. Если конечно не было другой длл.
FREEON
Цитата(cirus @ 28.6.2019, 13:10) *

Стандартной длл хватает. Она распаковывается при первом запуска пилота. Если конечно не было другой длл.

Возможно библиотеки не заменились или я сам когда копировал в старую папку новую версию пилота не заменил.
Все ровно чертить пилотом в разы быстрее чем фотошопить(пока загрузишь ph пока создашь узор, области выделишь и заполнишь) а пилотом бжык и все готово.
Сразу возникает вопрос как еще задать толщину линий сетки. Если 0, 0 это начало отсчета, то для сетки толщиной в 2px нужно 2 центра 0,1 и 1,0. Пытался ещё for приделать для прорисовки 2го слоя линий и прям картины рисуются но не сетка с нужной толщиной. Если одну из осей ещё получается подогнать вплотную к первой то со второй абы шо выходит
Нажмите для просмотра прикрепленного файла
cirus
Цитата
как еще задать толщину линий сетки

код
Код
--lua
local ffi=require "ffi"
local cc=ffi.cast

local path_in=[[C:\1.bmp]]  -- путь к картинке
local path_out=[[C:\2.bmp]] -- путь куда сохранить картинку с сеткой
local setkaX, setkaY = 10, 10  -- размеры сетки
local setkaR, setkaG, setkaB = 255, 0, 255  -- цвет сетки в ргб

local setka_width_X, setka_width_Y = 3, 3   -- толщина линий сетки


local address, width, height, length = loadimage(path_in)   -- загрузить картинку
if address > 0 then  -- если загружена
    for y=0, height-1  do
        for x=0, length-3, 3 do
            if  x % setkaX == 0 then
                for i=0, setka_width_X-1 do
                    cc("unsigned char*", address + x + y * length + i * 3)[0]=setkaB
                    cc("unsigned char*", address + x + y * length + i * 3 + 1)[0]=setkaG
                    cc("unsigned char*", address + x + y * length + i * 3 + 2)[0]=setkaR
                end
            end

            if  y % setkaY == 0 then
                for i=0, setka_width_Y-1 do
                    cc("unsigned char*", address + x + (y + i) * length)[0]=setkaB
                    cc("unsigned char*", address + x + (y + i) * length+1)[0]=setkaG
                    cc("unsigned char*", address + x + (y + i)  * length+2)[0]=setkaR
                end
            end
        end
    end
saveimage(address, path_out)    -- сохранить картинку
else log("Картинка не найдена")
end
minfin
можно рассмотреть формат .SVG (векторная графика)

// пишу сложный парсер для сложной инфографики
и в моём случае очень разгрузило и по скриптам, и по нагрузке, и вообще по функционалу


есть редакторы, и даже есть браузерный редактор. бесплатный.

картинки рисуются кодом.
особенно легко обновлять\редактировать\переносить текст в конкретные координаты.

работает в разы легче чем PSD, \\ где придется писать ручную правку слоёв через тонны Move\kleft
при этом так же имеет функции Слоёв (Layers)
которые можно править по переменной, не запуская сам редактор. (через write пилота)

\\ через костыли:
координатам\слоям\объектам\тексту можно задавать переменные, объединять в группы,
а через булиан в пилоте можно задать условия if на Цвет например... или
если есть окружности\маркеры\линии, то можно менять их размерность\толщину\длину. в зависимости от if

так,
если какая-то $переменная, например, в критической отметке,
то можно изменить цвет на красный, увеличить размер шрифта, сделать жирным ...
и уже от соотношения, можно влиять на политику расположения координат индекса (родительского слоя)
проще говоря:
одной правкой в фоновом режиме,
можно переместить огромный графический массив, в соответствии с логикой высчитанной в UO
что идеально.
и моментально.



формат SVG в браузере отображает как картинку, но текст выделяется\ищется\редактируется, а ссылки кликабельны.
чего нет в Пейнте и сложно реализуемо в фотошопе.

ну и соответственно,
если в пейнте начать рисовать, то изменить уже невозможно.
в SVG же достаточно одной правкой, в определённой строке, определённого параметра,
отвечающего за координат Х\Y\угол\радиус\синус\косинус\экспоненту
обновлять хоть в режиме реального времени.


SVG внутри похож на HTML\XML\CSS. так что лично я (нуб) разобрался дня за 3.
теперь вспоминаю язык Пилота =) годов из 2005


____________
не знаю для чего автору рисовать сетку в пейнте................
в SVG она делается буквально тремя строками кода, прямо из Пилота.
minfin
Код

<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
    <style type="text/css">
        line { stroke: #ccc; }
    </style>
<defs>
<pattern id="diagonalHatch" width="10" height="10" patternTransform="rotate(45)" patternUnits="userSpaceOnUse">
  <line x1="0" y1="0" x2="0" y2="10" />
</pattern>
</defs>
    <rect width="100%" height="100%" fill="url(#diagonalHatch)" />
<g class="layer">
  <title>TEST</title>
  <text fill="#000000" font-family="serif" font-size="24" id="svg_1" stroke="#000000" stroke-width="0" text-anchor="middle" x="265.5" xml:space="preserve" y="77.40625">TEST[</text>
</g>

</svg>


вот вроде...
проверить времени нет. Мультизагружен =)
но так чтоб понимать примерно по коду.

id="svg_1" - и есть переменная текстового слоя TEST.
костыль именно к ней. из этой строки (через regexp) уже редактируется весь слой. как хочешь.
тот же метод к Линиям\окружностям\и тп.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.