Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#16: 2012-02-01 11:14:33 ЛС | профиль | цитата
Вот так рабоатет:
Интерфейс16.rar

[flood]Только тут нет ползунков области просмотра, но Zoom всеравно уводит обьекты за пределы видимости и печатает их там. Это без прореживания событий от контролов такая скорость. Всё гладенько. В реальности так часто вызывать события не нужно будет.

Попробую описать:
Каждый прямоугольник графически отражает массив item. У этого массива есть, кроме музыкальных свойств - графические. Стартовый тик и конечный тик по сетке от начала(это мой X).

С Y сложнее, треки печатаются "как посты форумов в интернете", сверху вниз, потому, что у треков есть свойство "прядок вывода" (юзер может менять треки местами) и индивидуальная ширина трека(свойство: коэффициент ширины, относительно стандартной ширины, которую выдает ползунок zoom).
[/flood]
карма: 0

0
Ответов: 3889
Рейтинг: 362
#17: 2012-02-01 11:59:40 ЛС | профиль | цитата
login писал(а):
Вот так рабоатет:
Интерфейс16.rar

Как работает я понимаю, чай не один десяток музыкальных редакторов за свою жизнь использовал. Уровни вложенности не интересуют, интересует наличие массива в котором треки отсортированы уже в порядке вывода.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#18: 2012-02-01 12:02:32 ЛС | профиль | цитата
[flood]1nd1g0, да, есть маленький массив, в котром треки отсортированы к выводу.
В нем два параметра: номер трека и его реальный номер в главном массиве.

1nd1g0 писал(а):
Как работает я понимаю
я имел ввиду вроде быстро работает.[/flood]
карма: 0

0
Ответов: 3889
Рейтинг: 362
#19: 2012-02-01 12:42:34 ЛС | профиль | цитата
login писал(а):
вроде быстро работает.

Похоже, всё-таки лучше отбрасывать самостоятельно, на P4 3200 начинает заметно тормозить при выкручивании масштаба на максимум что однозначно указывает на то, что менеджер графики этого не делает, и даже больше ресурсов тратит на пропуск неотображаемых точек. Дома попробую на планшете почти без аппаратного ускорения графики, там вообще по кадрам будет дёргаться, подозреваю.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#20: 2012-02-01 13:06:22 ЛС | профиль | цитата
[flood]Сделал еще один тест, У Reaper более быстрый интерфейс чем у Cubase и Reason. Я довел Reaper до тормозов, создал по 100 клипов на 32 треках.
Потом сделал у себя так же - уровень тормозов примерно одинаковый.

Сделал тоже самое с Reason, тормоза больше чем у Reaper. Уже на 15 треках тормозит

То-есть оптимизации, отсечения невидимого у них тоже нет.

Вашу мысль понял! Сделать отсечение не очень сложно. Сделаю. Пока еще могу Ато потом нереально будет.




------------ Дoбавленo в 12.52:
1nd1g0 писал(а):
начинает заметно тормозить при выкручивании масштаба на максимум
тот пример тормозит от выкручивания на максимум верхнего движка влево, это от того, что количество линий сетки становится огромным(шириной в пиксель), а они выводятся в цикле. В реале линии сетки должны прореживаться при масштабировании.



------------ Дoбавленo в 13.06:
Пардон, не увидел сразу, при достаточно крупном зуме оптимизация у Reaper включается, и тормоза пропадают.





--------------------------
Похоже на то, что не важно насколько обьект выступает за пределы поля. GDI его отсекает. Тормоза появляются от самой работы по рисованию фигур. От рисующих циклов.

Проверил HiAsm - Оптимизация есть! Всё, чего не видно, не обсчитывается.[/flood]
карма: 0

0
Ответов: 3889
Рейтинг: 362
#21: 2012-02-01 13:32:13 ЛС | профиль | цитата
login писал(а):
Тормоза появляются от самой работы по рисованию фигур. От рисующих циклов.

О том и речь, и GDI мягко говоря не сразу отсекает, он тоже просчитывает геометрию и отрабатывает свои циклы целиком, просто не доходит до закрашивания реальных точек в буфере, если в этот буфер не попадает, но ресурсы ПК тратит.
карма: 1

1
Голосовали:login
Ответов: 8926
Рейтинг: 823
#22: 2012-02-01 13:49:41 ЛС | профиль | цитата
login, что-то не увидел про выделение мышкой, на всякий случай вот формула ("0" -- попали, "1" -- мимо): code_26711.txt
карма: 19

2
файлы: 1code_26711.txt [2.1KB] [153]
Голосовали:Konst, login
Ответов: 1429
Рейтинг: 50
#23: 2012-02-01 14:11:43 ЛС | профиль | цитата
Леонид писал(а):
что-то не увидел про выделение мышкой
да, мы отвлеклись от темы, извините.



Леонид, формулой это - нереально круто!
но только, почему-то, у меня не работает, нет связи между тем, что я выделил и белым цветом
Белый цвет появляется если где-то в стороне от обьекта выделяю.


карма: 0

0
Ответов: 8926
Рейтинг: 823
#24: 2012-02-01 14:40:35 ЛС | профиль | цитата
login, если про схему -- для контрастности цвет выделения красный, НЕ выделения -- белый
карма: 19

0
Ответов: 1429
Рейтинг: 50
#25: 2012-02-01 15:44:41 ЛС | профиль | цитата
Леонид, всё! Разобрался! Формула работает, просто мауз-ап не всегда срабатывает, нельзя мышку над обьектом отпускать! Особенность винды. Вам большой РЕСПЕКТ!!
[flood](исчерпал лимит голосов)[/flood]

Вот так у меня заработало:

Add(MainForm,4894883,217,77)
{
Width=356
Height=314
Point(onMouseDown)
Point(onMouseUp)
Point(MouseX)
Point(MouseY)
link(onMouseDown,1009591:doCompare,[])
link(onMouseUp,1872163:doCompare,[(275,111)(275,146)])
}
Add(Edit,14495577,560,273)
{
Left=100
Top=70
Width=125
Height=80
Enabled=1
Text=""
Point(doColor)
Point(Left)
Point(Top)
Point(Width)
Point(Height)
Point(onMouseUp)
link(onMouseUp,7687967:doWork3,[(610,293)(610,153)])
}
Add(Memory,7666969,217,287)
{
Point(Data)
link(onData,12487893:doValue,[])
link(Data,11016860:Var2,[])
}
Add(Memory,12487893,259,287)
{
Point(Data)
link(Data,4771447:Var2,[])
}
Add(Memory,16138599,364,259)
{
Point(Data)
link(onData,10343859:doValue,[])
link(Data,11016860:Var3,[(370,250)])
}
Add(Memory,10343859,406,259)
{
Point(Data)
link(onData,15482271:doCalc,[(504,265)(504,356)])
link(Data,4771447:Var3,[(412,233)])
}
Add(GetDataEx,4771447,259,228)
{
Angle=3
link(Data,4894883:MouseY,[(230,233)])
}
Add(GetDataEx,11016860,217,245)
{
link(Data,4894883:MouseX,[])
}
Add(DoData,3807483,700,392)
{
Data=String(Нет!)
link(onEventData,10905101:doWork3,[(769,398)])
}
Add(If_else,1009591,301,98)
{
Type=5
Op2=Integer(0)
link(onFalse,7666969:doValue,[(345,111)(345,202)(205,202)(205,293)])
}
Add(If_else,1872163,301,140)
{
Type=5
Op2=Integer(0)
link(onFalse,7687967:doWork2,[(333,153)])
}
Add(IndexToChanel,7070337,637,350)
{
link(onEvent1,13151540:doData,[])
link(onEvent2,3807483:doData,[(677,363)(677,398)])
}
Add(DoData,13151540,700,350)
{
Data=String(Попал!)
link(onEventData,10905101:doWork2,[])
}
Add(MathParse,15482271,539,350)
{
DataCount=8
MathStr="(max(%1,%3)<%5)+(min(%1,%3)>(%5+%7)) + (max(%2,%4)<%6)+(min(%2,%4)>(%6+%8))"
link(onResult,7070337:doEvent,[])
link(X1,7666969:Value,[(545,343)(223,343)])
link(X2,12487893:Value,[(552,338)(265,338)])
link(X3,16138599:Value,[(559,327)(370,327)])
link(X4,10343859:Value,[(566,317)(412,317)])
link(X5,14495577:Left,[])
link(X6,14495577:Top,[])
link(X7,14495577:Width,[])
link(X8,14495577:Height,[])
}
Add(HubEx,10905101,765,350)
{
Angle=3
link(onEvent,7340283:doText,[(769,328)])
}
Add(Label,7340283,826,322)
{
Left=140
Top=100
}
Add(HubEx,7687967,401,147)
{
Angle=1
link(onEvent,16138599:doValue,[(405,265)])
}



Леонид, я нашел мертвую зону, которую формула не видит. Она находится в направлениях, которые идут от углов обьекта.
------------ Дoбавленo в 15.04:
ae2.gif



------------ Дoбавленo в 15.44:
Разобрался в чем причина, просто формула иногда 2 возвращает - и это тоже значит "Нет"!


Add(MainForm,4894883,217,133)
{
Width=356
Height=314
Point(onMouseDown)
Point(onMouseUp)
Point(MouseX)
Point(MouseY)
link(onMouseDown,7666969:doValue,[(276,160)(276,210)(205,210)(205,293)])
link(onMouseUp,7687967:doWork2,[])
}
Add(Edit,14495577,560,273)
{
Left=100
Top=70
Width=125
Height=80
Enabled=1
Text=""
Point(doColor)
Point(Left)
Point(Top)
Point(Width)
Point(Height)
Point(onMouseUp)
link(onMouseUp,7687967:doWork3,[(610,293)(610,167)])
}
Add(Memory,7666969,217,287)
{
Point(Data)
link(onData,12487893:doValue,[])
link(Data,11016860:Var2,[])
}
Add(Memory,12487893,259,287)
{
Point(Data)
link(Data,4771447:Var2,[])
}
Add(Memory,16138599,364,259)
{
Point(Data)
link(onData,10343859:doValue,[])
link(Data,11016860:Var3,[(370,250)])
}
Add(Memory,10343859,406,259)
{
Point(Data)
link(onData,15482271:doCalc,[(504,265)(504,356)])
link(Data,4771447:Var3,[(412,233)])
}
Add(GetDataEx,4771447,259,228)
{
Angle=3
link(Data,4894883:MouseY,[(230,233)])
}
Add(GetDataEx,11016860,217,245)
{
link(Data,4894883:MouseX,[])
}
Add(DoData,3807483,679,392)
{
Data=String(Нет!)
link(onEventData,10905101:doWork3,[(748,398)])
}
Add(IndexToChanel,7070337,616,350)
{
Count=3
link(onEvent1,13151540:doData,[])
link(onEvent2,1801417:doWork1,[(668,363)])
link(onEvent3,1801417:doWork2,[])
}
Add(DoData,13151540,679,350)
{
Data=String(Попал!)
link(onEventData,10905101:doWork2,[])
}
Add(MathParse,15482271,539,350)
{
DataCount=8
MathStr="(max(%1,%3)<%5)+(min(%1,%3)>(%5+%7)) + (max(%2,%4)<%6)+(min(%2,%4)>(%6+%8))"
ResultType=0
link(onResult,7070337:doEvent,[])
link(X1,7666969:Value,[(545,343)(223,343)])
link(X2,12487893:Value,[(552,338)(265,338)])
link(X3,16138599:Value,[(559,327)(370,327)])
link(X4,10343859:Value,[(566,317)(412,317)])
link(X5,14495577:Left,[])
link(X6,14495577:Top,[])
link(X7,14495577:Width,[])
link(X8,14495577:Height,[])
}
Add(HubEx,10905101,744,350)
{
Angle=3
link(onEvent,7340283:doText,[(748,328)])
}
Add(Label,7340283,798,322)
{
Left=140
Top=100
}
Add(HubEx,7687967,450,161)
{
Angle=1
link(onEvent,16138599:doValue,[(454,210)(352,210)(352,265)])
}
Add(HubEx,1801417,664,364)
{
Angle=1
link(onEvent,3807483:doData,[(668,398)])
}


Теперь все работает!
карма: 0

0
файлы: 1ae2.gif [216KB] [204]
Ответов: 8926
Рейтинг: 823
#26: 2012-02-01 15:59:46 ЛС | профиль | цитата
login писал(а):
формула иногда 2 возвращает
и правда, держал в уме, пока формулу рисовал, думал на выходе If<>0 поставить, да забыл
login писал(а):
мауз-ап не всегда срабатывает, нельзя мышку над обьектом
это есть, иногда мешает, иногда помогает, надо бы свойство сделать или в эмуляторе мышки точки onVouseDown и onMouseUp на которых сигнал всегда был бы.
карма: 19

0
26
Сообщение
...
Прикрепленные файлы
(файлы не залиты)