Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 1999
Рейтинг: 634
#16: 2020-10-14 21:30:35 ЛС | профиль | цитата
Poputchik писал(а):
Как сделать, чтоб перерисовка сетки меньше ресурсов потребляла?

Poputchik, у вас при рисование сетки вообще грубая ошибка. Каждый раз при рисовании очередной линии, а их в сетке может доходить до сотни, происходит чтение с Ini файла ширины линии. Вначале назначить все данные, потом запускать цикл(ы)!
Вот как вариант без циклов, достаточно быстро:


Add(MultiElementEx,15159630,364,350)
{
@Hint=#5:Сетка|
link(Index,16330067:Var,[])
link(Index1,1141211:getVar,[])
AddHint(66,8,45,13,@Hint)
}
BEGIN_SDK
Add(EditMultiEx,8231950,21,21)
{
WorkCount=#24:load=Загрузка при старте|22:doEvent=Рисовать сетку|
DataCount=#15:Index=рисовать?|27:Index1=Объект для рисования|
Width=461
Height=396
VOffset=70
HOffset=70
link(doEvent,11872306:doEvent,[(56,104)(56,230)])
}
Add(IndexToChanel,11872306,91,224)
{
Count=3
Point(Index)
link(onEvent2,14559719:doEvent1,[])
link(Index,8231950:Index,[])
}
Add(Ini,7772716,175,112)
{
FileName="Parameters.ini"
Section="Color"
Key="setka"
Type=1
link(onResult,10765152:doValue,[])
}
Add(Ini,8649104,168,238)
{
FileName="Parameters.ini"
Section="Setka"
Key="shag"
Type=1
link(onResult,6598284:doOperation,[])
}
Add(Img_FloodFill,4929651,350,329)
{
X=1
Y=1
PatternStyle=0
Point(Pattern)
link(Bitmap,8231950:Index1,[(356,78)(104,78)])
link(Pattern,576848:Var3,[(370,317)(406,317)(406,381)])
}
Add(Bitmap,1772281,217,329)
{
HWidth=4
HHeight=4
FillColor=12632256
Point(doCreate)
Point(onCreate)
Point(HWidth)
Point(HHeight)
link(onCreate,11330297:doDraw,[])
link(HWidth,13116422:Var2,[])
link(HHeight,13116422:Var3,[(230,313)])
}
Add(Img_Line,11330297,266,329)
{
Point2=6553600
Point(Color)
link(onDraw,1275272:doDraw,[])
link(Bitmap,13849584:Var1,[(272,317)(258,317)])
link(Color,7331168:Var2,[])
}
Add(GetDataEx,13849584,252,376)
{
Angle=3
link(Data,1772281:Bitmap,[(223,381)])
}
Add(Img_Line,1275272,308,329)
{
Point2=100
Point(Color)
link(onDraw,4929651:doDraw,[])
link(Bitmap,576848:Var1,[(314,317)(300,317)])
link(Color,7331168:Var3,[(321,159)])
}
Add(GetDataEx,576848,294,376)
{
Angle=3
link(Data,13849584:Var3,[])
}
Add(Memory,10765152,273,112)
{
}
Add(GetDataEx,7331168,273,154)
{
link(Data,10765152:Value,[])
}
Add(Hub,14559719,133,231)
{
OutCount=3
link(onEvent1,7772716:doRead,[(154,237)(154,118)])
link(onEvent2,8649104:doRead,[])
link(onEvent3,1772281:doCreate,[(156,251)(156,349)])
}
Add(GetDataEx,13116422,217,308)
{
link(Data,6598284:Result,[])
}
Add(Math,6598284,217,238)
{
OpType=2
Op2=3
}
END_SDK
Add(LineBreakEx,1141211,371,322)
{
Caption="bmp"
Type=2
}
Add(LineBreak,14496882,98,637)
{
Caption="setka"
Type=1
Primary=[16330067,266,-329]
}
Poputchik писал(а):
Можно при рисовании линии к сетке привязаться?
Нужно отслеживать позицию курсора и принудительно перемещать его в ближайшую точку сетки. И соответственно заносить позицию линии с шагом сетки.
Poputchik писал(а):
Как создать радиодеталь и потом перетянуть на поле?
Как вариант иметь маску (картинку) данной радиодетали из двух цветов (один цвет корпус, второй ножка от которой можно тянуть связь) и фон и рисунок самой радиодетали.
Poputchik писал(а):
В какой файл всё это потом записывать (может Sqlite нужно использовать, для большей скорости обработки данных?)?
Как по мне так обычного текстового на старте хватит.
карма: 9

0
Ответов: 403
Рейтинг: 57
#17: 2020-10-20 23:12:35 ЛС | профиль | цитата
sla8a, Спасибо за подсказки.
Нужно отслеживать позицию курсора и принудительно перемещать его в ближайшую точку сетки. И соответственно заносить позицию линии с шагом сетки.

Получилось перемещать точку не трогая сам курсор (на что мозгов хватило). Может кому пригодится.
Схема

Add(MainForm,2953706,77,84)
{
}
Add(PaintBox,4708376,315,168)
{
Left=20
Top=20
Width=215
Height=240
ClearBeforeDraw=0
Point(onMouseEnter)
Point(MouseX)
Point(MouseY)
Point(onMouseMove)
link(onBeforeDraw,14559719:doEvent1,[(354,174)(354,146)(32,146)(32,293)])
link(onMouseMove,2554814:doEvent1,[])
}
Add(Img_Line,11330297,315,399)
{
Point2=6553600
Point(Color)
Point(Point2)
link(Bitmap,3336356:Var2,[])
link(Point2,1277526:Point,[(335,390)(377,390)])
}
Add(Hub,2554814,364,182)
{
link(onEvent2,4708376:doRefresh,[(389,195)(389,153)(298,153)(298,174)])
}
Add(Img_FloodFill,4929651,238,245)
{
X=1
Y=1
Color=255
ColorBorder=65280
PatternStyle=0
Point(Pattern)
link(Bitmap,3336356:Var1,[(244,208)])
link(Pattern,576848:Var3,[(258,233)(278,233)(278,290)])
}
Add(Bitmap,1772281,91,245)
{
HWidth=10
HHeight=10
FillColor=12632256
Point(doCreate)
Point(onCreate)
Point(HWidth)
Point(HHeight)
Point(FillColor)
link(onCreate,13724041:doDraw,[])
}
Add(Img_Line,13724041,140,245)
{
Point2=6553600
Color=32896
Point(Color)
link(onDraw,1275272:doDraw,[])
link(Bitmap,13849584:Var1,[(146,236)(132,236)])
}
Add(GetDataEx,13849584,126,285)
{
Angle=3
link(Data,1772281:Bitmap,[(97,290)])
}
Add(Img_Line,1275272,189,245)
{
Point2=100
Color=32896
Point(Color)
link(onDraw,4929651:doDraw,[])
link(Bitmap,576848:Var1,[(195,236)(181,236)])
}
Add(GetDataEx,576848,175,285)
{
Angle=3
link(Data,13849584:Var3,[])
}
Add(Hub,14559719,49,287)
{
OutCount=3
link(onEvent1,1772281:doCreate,[(74,293)(74,265)])
link(onEvent2,558041:doEvent1,[])
link(onEvent3,11330297:doDraw,[(81,307)(81,405)])
}
Add(GetDataEx,3336356,315,203)
{
link(Data,4708376:Bitmap,[])
}
Add(MathParse,9270417,357,301)
{
DataCount=1
MathStr="round(%1, 10)"
link(X1,4708376:MouseX,[(363,257)(328,257)])
}
Add(MathParse,350822,399,294)
{
DataCount=1
MathStr="round(%1, 10)"
link(X1,4708376:MouseY,[(405,229)(335,229)])
}
Add(PointXY,1277526,371,350)
{
link(X,9270417:Result,[(377,341)(363,341)])
link(Y,350822:Result,[(384,341)(405,341)])
}
Add(Hub,558041,329,294)
{
link(onEvent1,350822:doCalc,[])
link(onEvent2,9270417:doCalc,[])
}


Редактировалось 2 раз(а), последний 2020-10-21 00:14:32
карма: 0

0
Ответов: 4788
Рейтинг: 536
#18: 2020-10-21 21:32:46 ЛС | профиль | цитата
Рисовать графику в HiAsm всегда было Ахиллесовой Пятой, для систем управления автоматизацией это не есть хорошо (попадаешь в зависимость к разработчику) Выход только один, сделать API пример https://forum.hiasm.com/getfile/39163
Кто посчитает нужным и сделает примеры скриптов получит уже готовый компонет
Вычисление скорости в микросекундах внизу, можете сравнить со схемами в HiAsm.
Help в формате word в загрузках

карма: 7
1
Голосовали:tig-rrr
18
Сообщение
...
Прикрепленные файлы
(файлы не залиты)