Вверх ↑
Этот топик читают: Гость
Ответов: 1291
Рейтинг: 47
#1: 2010-03-18 13:47:19 ЛС | профиль | цитата
Все свои компоненты буду выкладывать здесь.

Установка: распаковать в одну папку, затем перетащить файл .ini на рабочее поле Хиасма.

1. Компонент для взаимодействия с объектами посредством мыши в Open GL "OGLInteractive":
http://hiasm.com/xf/topic.php?t=9275&start=0
Попробуйте перетащить красный куб мышкой сквозь другие фигуры. Правая кнопка перемещает по XY, левая - по оси Z.

2. Компонент для шифрования/дешифрования текста "SecretString". Еще немного сыроват..

3. Модифицированный Counter - добавил выходы переносов и переполнений, чтобы можно было соединять последовательно как двоичные счетчики. Установка - заменить аналогичные файлы в каталогах code и conf и перезапустить Хиасм.

4. Компонент SharedVar 1.0 для межпроцессного взаимодействия (IPC) в нескольких программах. Создает общие переменные через которые программы могут обмениваться данными через память. Работает со строками, которые можно преобразовать в другие типы. Для потоков существует стандартный компонент SharedStream. Но он требует дополнительной обвязки элементами и более сложен в применении для обмена переменными. [added: 9.9.11]
SharedVar 1.1: подправил - теперь более корректно инициализирует память и удаляет из нее. [added: 24.9.11]
SharedVar 1.2: устранена ошибка MapViewOfFile failed при работе компонента при накоплении 31736 незакрытых отображений. Теперь отображения не накапливаются. [added: 21.9.13]
ogl_interactive1.1 Обновлен для совместимости с SVN, спасибо MAV. [updated: 9.10.13]
5. Компонент Candles 1.0 для отрисовки японсских свечей и рабочей сетчатой зоны с зумом для финансовых программ: https://disk.yandex.ru/d/zyL_NYKZ-szBaw Есть глюки, подробнее в комментах. [added: 30.7.24]
Candles1.1: https://disk.yandex.ru/d/ORPJ8zORV_HmzQ глюки побеждены, много добавлено, но компонент еще нужно допиливать.[added: 12.8.24]

Редактировалось 4 раз(а), последний 2024-08-12 02:29:17
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
6
файлы: 5ogl_interactive.rar [49.5KB] [764], sharedvar1.0.rar [11.7KB] [741], sharedvar1.1.rar [5KB] [485], sharedvar1.2.rar [5.2KB] [506], ogl_interactive1.1.rar [53.2KB] [534]
Голосовали:sla8a, Genius, Konst, MAV, ser_davkin, Мартынов
Ответов: 1304
Рейтинг: 405
#2: 2010-03-21 19:43:17 ЛС | профиль | цитата
Aziz, интересные совпадения, пару дней как раз убил на буфер выбора. По моим скромным заключениям буфер выбора оказался делом заморочным и пригодным только для 2D, при поворотах сцены параметры матриц необходимо пересчитывать . Возможно я ошибаюсь и в твоём компоненте это учтено(чуть позже попытаюсь разобраться). Если это так то помоги разобраться с примером, вращается сцена а на ней бублик, надо его отловить.


Add(MainForm,15261923,28,35)
{
Left=20
Top=105
Width=440
Height=421
Point(MouseX)
Point(MouseY)
Point(onResize)
Point(Handle)
Point(Width)
Point(Height)
Point(onMouseDown)
link(onCreate,16299401:doEvent1,[(75,55)(75,202)])
link(onResize,16131419:doWork1,[(137,62)])
link(onMouseDown,13366391:doClick,[(128,69)(128,160)])
}
Add(GL_Main,12986311,168,196)
{
link(onInit,12198675:doInit,[])
link(onViewPort,3410847:doPerspective,[(223,209)(223,251)])
link(Handle,15261923:Handle,[(174,133)(48,133)])
}
Add(Timer,9506849,56,245)
{
Interval=33
Enable=1
link(onTimer,1049454:doEvent1,[])
}
Add(GL_GTools,771925,168,245)
{
Point(doClear)
Point(doPushMatrix)
Point(doPopMatrix)
}
Add(Hub,1049454,105,245)
{
OutCount=5
link(onEvent1,771925:doClear,[])
link(onEvent2,771925:doPushMatrix,[])
link(onEvent3,13366391:doDraw,[(179,265)(179,153)])
link(onEvent4,771925:doPopMatrix,[(156,272)(156,265)])
link(onEvent5,12986311:doFlip,[(151,279)(151,216)])
}
Add(Hub,16299401,84,196)
{
OutCount=3
link(onEvent1,12986311:doInit,[])
link(onEvent2,16131419:doWork2,[])
link(onEvent3,9506849:doTimer,[(111,216)(111,234)(46,234)(46,251)])
}
Add(GL_GluTools,12198675,231,196)
{
link(onInit,1101264:doEnabled,[])
}
Add(GL_Light,14989894,427,196)
{
link(onEnabled,4378486:doEnabled,[])
}
Add(GL_Options,1101264,280,196)
{
link(onEvent,5851269:doEnabled,[])
}
Add(GL_Options,5851269,329,196)
{
Flag=1
link(onEvent,5809249:doEnabled,[])
}
Add(GL_Options,5809249,378,196)
{
Flag=2
link(onEvent,14989894:doEnabled,[])
}
Add(MultiElement,10714674,294,147)
{
link(onEvent1,15200808:doDraw,[])
link(Data1,7732851:Var3,[(300,117)])
link(Data2,3146508:Var3,[(307,110)])
}
BEGIN_SDK
Add(EditMulti,4359962,3,3)
{
EventCount=1
WorkCount=1
DataCount=2
Width=223
Height=109
link(doWork1,3276760:doRotate,[(19,9)(19,55)])
}
Add(GL_Rotate,3276760,35,49)
{
Y=1
link(onRotate,8079493:doRotate,[])
link(Angle,4359962:Data1,[(62,15)(9,15)])
}
Add(GL_Rotate,8079493,112,49)
{
X=1
link(onRotate,4359962:onEvent1,[(189,55)(189,9)])
link(Angle,4359962:Data2,[(139,8)(16,8)])
}
END_SDK
Add(GL_Perspective,3410847,231,245)
{
Fovy=20
}
Add(HubEx,16131419,133,203)
{
link(onEvent,12986311:doViewPort,[])
}
Add(OGLInteractive,13366391,238,147)
{
link(MouseX,7732851:Var1,[(244,105)(111,105)])
link(MouseY,3146508:Var1,[(251,95)(97,95)])
link(Width,15261923:Width,[(258,87)(55,87)])
link(Height,15261923:Height,[(265,81)(62,81)])
link(DrawN,10714674:doWork1,[])
link(OnSelect,15261923:doCaption,[(279,160)(279,26)(20,26)(20,41)])
}
Add(GL_Torus,15200808,343,147)
{
inRadius=0.15
outRadius=0.8
Sides=20
Rings=20
}
Add(GetDataEx,7732851,105,112)
{
Angle=3
link(Data,15261923:MouseX,[(34,117)])
}
Add(GetDataEx,3146508,91,105)
{
Angle=3
link(Data,15261923:MouseY,[(41,110)])
}
Add(GL_Options,4378486,476,196)
{
Flag=3
}

За то что в первом компоненте попытался поднять такую сложную тему +, а далее принимай критику .
а)схема оформлена отвратительна и практически нечитаема,
б)необходимо брать координаты клиенской области окна, можно типа glGetIntegerv(GL_VIEWPORT,@Viewport); второя и третья строка масива.
в)Куча мусора в виде ненужных коментов в hiOGLInteractive.pas
ps: в теме OpenGL_Extension вариант выбора объектов с использованием буфера цвета
карма: 3

0
файлы: 1code_17443.txt [2.9KB] [500]
Ответов: 1291
Рейтинг: 47
#3: 2010-03-21 23:10:26 ЛС | профиль | цитата
MAV, обычно я когда у кого-то что-то работает, пытаюсь видоизменить УЖЕ РАБОТАЮЩУЮ схему под свои нужды. Так почему бы тебе не видоизменить немного мою тестовую схему? Вот добавил твой бублик и он получает номер 5. Присвоение номера и отрисовка объекта происходят динамически, честно говоря сам уже не помню как удалось все это заставить работать... Сильно хотелось мышью таскать фигуры в OGL когда-то... Короче, разбирайся и оптимизируй. Буду признателен если поделишься своей оптимизацией здесь, а то ни сил ни времени на это уже нет...



Add(MainForm,15261923,126,93)
{
Left=20
Top=105
Width=440
Height=421
Caption="Локализация объектов в Open GL"
Point(MouseX)
Point(MouseY)
Point(onMouseDown)
Point(Width)
Point(Height)
Point(onMouseMove)
Point(onMouseUp)
Point(onResize)
Point(Handle)
link(onCreate,16299401:doEvent1,[(184,113)(184,253)])
link(onMouseDown,207829:doClick,[(352,120)(352,183)])
link(onMouseMove,10272414:doEvent1,[(176,127)(176,270)(137,270)(137,413)])
link(onMouseUp,12264151:doEvent1,[(180,134)(180,106)])
link(onResize,9413709:doEvent1,[])
}
Add(GL_Main,12986311,273,247)
{
link(onInit,12198675:doInit,[])
link(onViewPort,3410847:doPerspective,[(328,260)(328,302)])
link(Handle,15261923:Handle,[(279,196)(160,196)])
}
Add(Timer,9506849,161,331)
{
Interval=50
Enable=1
link(onTimer,1049454:doEvent1,[])
}
Add(GL_GTools,771925,273,331)
{
Point(doClear)
Point(doPushMatrix)
Point(doPopMatrix)
}
Add(GL_Disk,10710321,784,590)
{
OutRadius=0.3
}
Add(Hub,1049454,210,331)
{
OutCount=6
link(onEvent1,771925:doClear,[])
link(onEvent2,771925:doPushMatrix,[])
link(onEvent3,207829:doDraw,[(412,351)(412,176)])
link(onEvent4,771925:doPopMatrix,[(261,358)(261,351)])
link(onEvent5,12986311:doFlip,[(257,365)(257,267)])
}
Add(Hub,16299401,203,247)
{
OutCount=3
link(onEvent1,12986311:doInit,[])
link(onEvent2,14551396:doWork2,[])
link(onEvent3,9506849:doTimer,[(245,267)(245,305)(151,305)(151,337)])
}
Add(MultiElement,10714674,777,464)
{
link(onEvent1,3488729:doColor,[])
link(Data1,8650192:Value,[(783,361)(867,361)])
link(Data2,14479943:Value,[(790,361)(909,361)])
}
BEGIN_SDK
Add(EditMulti,4359962,3,3)
{
EventCount=1
WorkCount=1
DataCount=2
Width=223
Height=109
link(doWork1,3276760:doRotate,[(19,9)(19,55)])
}
Add(GL_Rotate,3276760,35,49)
{
Angle=50
Y=1
link(onRotate,8079493:doRotate,[])
link(Angle,4359962:Data1,[(41,26)(9,26)])
}
Add(GL_Rotate,8079493,112,49)
{
Angle=50
X=1
link(onRotate,4359962:onEvent1,[(189,55)(189,9)])
link(Angle,4359962:Data2,[(118,26)(16,26)])
}
END_SDK
Add(GL_Material,10503751,441,499)
{
Diffuse=16711935
Specular=32768
Emission=-16777215
Shininess=3
link(onSet,10036663:doDraw,[])
}
Add(GL_Options,10513853,630,247)
{
Flag=1
}
Add(GL_Cube,10697821,861,464)
{
Size=0.5
link(onDraw,8151851:doPopMatrix,[])
}
Add(GL_Perspective,3410847,336,296)
{
Fovy=20
}
Add(GL_Options,4378486,532,247)
{
Flag=3
link(onEvent,14989894:doEnabled,[])
}
Add(GL_Options,5809249,483,247)
{
Flag=2
link(onEvent,4378486:doEnabled,[])
}
Add(GL_Sphere,7606666,861,506)
{
Radius=0.3
}
Add(GetDataEx,6018437,168,174)
{
link(Data,4947514:Data1,[(179,168)(202,168)(202,242)(293,242)])
}
Add(GetDataEx,6158151,154,181)
{
link(Data,7405542:Data1,[(160,169)(174,169)(174,228)(223,228)])
}
Add(Gl_Axis,10036663,546,499)
{
TitleScale=0.5
link(onDraw,11050489:doPushMatrix,[(594,505)(594,470)])
}
Add(HubEx,14551396,259,254)
{
link(onEvent,12986311:doViewPort,[])
}
Add(GL_GluTools,12198675,336,247)
{
Texture=0
link(onInit,1101264:doEnabled,[])
}
Add(GL_Light,14989894,581,247)
{
Ambient=16777215
Diffuse=8388608
link(onEnabled,10513853:doEnabled,[])
}
Add(GL_Options,1101264,385,247)
{
link(onEvent,5851269:doEnabled,[])
}
Add(GL_Options,5851269,434,247)
{
Flag=10
link(onEvent,5809249:doEnabled,[])
}
Add(Hub,9413709,196,135)
{
link(onEvent1,14551396:doWork1,[(263,141)])
link(onEvent2,207829:onResize,[(404,148)(404,190)])
}
Add(Label,9923747,700,128)
{
Left=365
Top=45
}
Add(IndexToChanel,12896117,385,492)
{
Count=10
link(onEvent2,10503751:doSet,[])
link(onEvent3,2915928:doRotate,[])
link(onEvent4,11693041:doRotate,[(572,519)(572,554)])
link(onEvent5,6609235:doRotate,[(572,526)(572,596)])
link(onEvent6,15219467:doWork1,[(545,533)(545,657)])
}
Add(Gl_Translate,4582173,721,590)
{
Z=0.5
link(onTranslate,10710321:doDraw,[])
}
Add(Gl_Translate,9241450,721,464)
{
X=-2.8
link(onTranslate,10714674:doWork1,[])
link(X,7575323:Result,[(727,410)(715,410)])
link(Y,7998797:Result,[(734,430)(715,430)])
link(Z,4300078:Result,[(741,452)(715,452)])
}
Add(OGLInteractive,207829,539,170)
{
N=10
link(MouseX,6158151:Var2,[(545,151)(373,151)(373,202)(160,202)])
link(MouseY,6018437:Var1,[(552,151)(157,151)(157,179)])
link(Width,15261923:Width,[(559,158)(146,158)])
link(Height,15261923:Height,[(566,158)(153,158)])
link(DrawN,12896117:doEvent,[(583,176)(583,337)(373,337)(373,498)])
link(OnSelect,13680259:doValue,[(601,183)(601,134)])
}
Add(GL_Cylinder,4635794,861,548)
{
BaseRadius=0.2
TopRadius=0
}
Add(Gl_Translate,9702095,721,506)
{
X=0.5
link(onTranslate,6053718:doColor,[])
}
Add(Gl_Translate,125527,721,548)
{
X=0.5
link(onTranslate,10797479:doColor,[])
}
Add(GL_Rotate,6755901,665,464)
{
link(onRotate,9241450:doTranslate,[])
}
Add(GL_Rotate,2915928,665,506)
{
link(onRotate,9702095:doTranslate,[])
}
Add(GL_Rotate,11693041,665,548)
{
link(onRotate,125527:doTranslate,[])
}
Add(GL_Rotate,6609235,665,590)
{
link(onRotate,4582173:doTranslate,[])
}
Add(Hub,10272414,149,407)
{
OutCount=3
link(onEvent1,6256965:doValue,[(192,413)(192,393)])
link(onEvent2,1632577:doEvent,[(405,420)(405,183)])
}
Add(Memory,6256965,203,387)
{
}
Add(IndexToChanel,7410028,203,429)
{
Count=5
Point(Index)
link(onEvent1,6804651:doEvent1,[(245,435)(245,434)])
link(onEvent2,15305019:doEvent1,[(269,442)(269,511)])
link(onEvent3,2113612:doEvent1,[(517,449)(517,211)])
link(Index,6256965:Value,[])
}
Add(GetData,7405542,217,191)
{
Count=3
link(Data,15261923:MouseX,[(223,168)(132,168)])
}
Add(Hub,6804651,254,428)
{
OutCount=3
link(onEvent1,3729466:doEvent1,[(296,434)(296,413)])
link(onEvent2,7764526:doEvent1,[(296,441)(296,462)])
}
Add(IndexToChanel,1632577,630,177)
{
Count=5
Point(Index)
link(onEvent2,7410028:doEvent,[(674,190)(674,312)(191,312)(191,435)])
link(Index,13680259:Value,[])
}
Add(Memory,13680259,630,128)
{
link(onData,9923747:doText,[])
}
Add(MultiElementEx,3729466,303,407)
{
@Hint=#25:Контроль изменения данных|
link(onDcr,16121427:doNext,[(501,413)(501,329)])
link(onInc,16121427:doPrev,[(501,427)(501,336)])
link(Data,7405542:Data2,[(309,315)(230,315)])
}
BEGIN_SDK
Add(EditMultiEx,7156753,6,6)
{
WorkCount=#8:doEvent1|
EventCount=#5:onDcr|7:onEqual|5:onInc|8:onChange|
DataCount=#4:Data|
Width=440
Height=242
link(doEvent1,3955324:doEvent1,[(14,12)(14,83)])
}
Add(Memory,6567996,217,63)
{
link(onData,6381848:doCompare,[(261,69)(261,48)(205,48)(205,27)])
}
Add(DoData,2751385,168,63)
{
link(onEventData,6567996:doValue,[])
link(Data,4073440:Data1,[])
}
Add(DoData,1187485,168,105)
{
link(onEventData,15537973:doValue,[])
link(Data,4073440:Data2,[(174,75)(181,75)])
}
Add(GetData,7079463,301,91)
{
link(Data,15537973:Value,[(307,79)(265,79)(265,149)(223,149)])
}
Add(Switch,1207220,70,77)
{
DataOn=Integer(1)
DataOff=Integer(0)
link(onSwitch,11945411:doEvent,[])
}
Add(IndexToChanel,11945411,112,77)
{
link(onEvent1,2751385:doData,[(156,83)(156,69)])
link(onEvent2,1187485:doData,[(156,90)(156,111)])
}
Add(GetData,4073440,168,21)
{
link(Data,7156753:Data,[(174,13)(12,13)])
}
Add(Memory,15537973,217,105)
{
link(onData,10201425:doCompare,[(261,111)(261,135)(205,135)(205,160)])
}
Add(If_else,10201425,217,154)
{
Type=1
link(onTrue,13220382:doEvent1,[(261,160)(261,195)])
link(Op2,2326711:Data1,[(230,138)(272,138)])
}
Add(If_else,6381848,217,21)
{
Type=2
link(onTrue,7063144:doEvent1,[])
link(Op2,7079463:Data1,[(230,9)(268,9)(268,135)(307,135)])
}
Add(Hub,3955324,21,77)
{
link(onEvent1,1207220:doSwitch,[])
link(onEvent2,14039224:doCompare,[(181,90)(181,167)])
}
Add(If_else,14039224,315,161)
{
link(onTrue,2799023:doEvent1,[])
link(Op1,2326711:Data2,[(321,146)(279,146)])
link(Op2,7079463:Data2,[(328,146)(314,146)])
}
Add(GetData,2326711,266,91)
{
link(Data,6567996:Value,[(272,79)(248,79)(248,107)(223,107)])
}
Add(Hub,2799023,357,161)
{
link(onEvent1,6525598:doEvent3,[(401,167)(401,143)(331,143)(331,118)])
link(onEvent2,7156753:onEqual,[(417,174)(417,19)])
}
Add(Hub,6525598,343,98)
{
InCount=3
OutCount=1
link(onEvent1,7156753:onChange,[(411,104)(411,33)])
}
Add(Hub,7063144,273,21)
{
link(onEvent1,6525598:doEvent1,[(324,27)(324,104)])
link(onEvent2,7156753:onDcr,[(375,34)(375,12)])
}
Add(Hub,13220382,273,189)
{
link(onEvent1,6525598:doEvent2,[(327,195)(327,111)])
link(onEvent2,7156753:onInc,[(375,202)(375,26)])
}
END_SDK
Add(MultiElementEx,7764526,303,456)
{
@Hint=#25:Контроль изменения данных|
link(onDcr,5313796:doPrev,[(501,462)(501,378)])
link(onInc,5313796:doNext,[(557,476)(557,371)])
link(Data,4947514:Data2,[(309,336)(300,336)])
}
BEGIN_SDK
Add(EditMultiEx,7156753,6,6)
{
WorkCount=#8:doEvent1|
EventCount=#5:onDcr|7:onEqual|5:onInc|8:onChange|
DataCount=#4:Data|
Width=440
Height=242
link(doEvent1,3955324:doEvent1,[(14,12)(14,83)])
}
Add(Memory,6567996,217,63)
{
link(onData,6381848:doCompare,[(261,69)(261,48)(205,48)(205,27)])
}
Add(DoData,2751385,168,63)
{
link(onEventData,6567996:doValue,[])
link(Data,4073440:Data1,[])
}
Add(DoData,1187485,168,105)
{
link(onEventData,15537973:doValue,[])
link(Data,4073440:Data2,[(174,75)(181,75)])
}
Add(GetData,7079463,301,91)
{
link(Data,15537973:Value,[(307,79)(265,79)(265,149)(223,149)])
}
Add(Switch,1207220,70,77)
{
DataOn=Integer(1)
DataOff=Integer(0)
link(onSwitch,11945411:doEvent,[])
}
Add(IndexToChanel,11945411,112,77)
{
link(onEvent1,2751385:doData,[(156,83)(156,69)])
link(onEvent2,1187485:doData,[(156,90)(156,111)])
}
Add(GetData,4073440,168,21)
{
link(Data,7156753:Data,[(174,13)(12,13)])
}
Add(Memory,15537973,217,105)
{
link(onData,10201425:doCompare,[(261,111)(261,135)(205,135)(205,160)])
}
Add(If_else,10201425,217,154)
{
Type=1
link(onTrue,13220382:doEvent1,[(261,160)(261,195)])
link(Op2,2326711:Data1,[(230,138)(272,138)])
}
Add(If_else,6381848,217,21)
{
Type=2
link(onTrue,7063144:doEvent1,[])
link(Op2,7079463:Data1,[(230,9)(268,9)(268,135)(307,135)])
}
Add(Hub,3955324,21,77)
{
link(onEvent1,1207220:doSwitch,[])
link(onEvent2,14039224:doCompare,[(181,90)(181,167)])
}
Add(If_else,14039224,315,161)
{
link(onTrue,2799023:doEvent1,[])
link(Op1,2326711:Data2,[(321,146)(279,146)])
link(Op2,7079463:Data2,[(328,146)(314,146)])
}
Add(GetData,2326711,266,91)
{
link(Data,6567996:Value,[(272,79)(248,79)(248,107)(223,107)])
}
Add(Hub,2799023,357,161)
{
link(onEvent1,6525598:doEvent3,[(401,167)(401,143)(331,143)(331,118)])
link(onEvent2,7156753:onEqual,[(417,174)(417,19)])
}
Add(Hub,6525598,343,98)
{
InCount=3
OutCount=1
link(onEvent1,7156753:onChange,[(411,104)(411,33)])
}
Add(Hub,7063144,273,21)
{
link(onEvent1,6525598:doEvent1,[(324,27)(324,104)])
link(onEvent2,7156753:onDcr,[(375,34)(375,12)])
}
Add(Hub,13220382,273,189)
{
link(onEvent1,6525598:doEvent2,[(327,195)(327,111)])
link(onEvent2,7156753:onInc,[(375,202)(375,26)])
}
END_SDK
Add(GetData,4947514,287,191)
{
Count=4
link(Data,15261923:MouseY,[(293,168)(139,168)])
}
Add(Counter,16121427,667,323)
{
Min=-9999999
Max=9999999
link(onNext,7575323:doOperation,[])
}
Add(Math,7575323,709,323)
{
OpType=3
Op2=20
}
Add(GL_GTools,8151851,910,464)
{
Point(doPopMatrix)
}
Add(GL_GTools,11050489,609,464)
{
Point(doPushMatrix)
link(onEvent,6755901:doRotate,[])
}
Add(Counter,5313796,667,365)
{
Min=-9999999
Max=9999999
link(onNext,7998797:doOperation,[])
}
Add(Math,7998797,709,365)
{
OpType=3
Op2=20
}
Add(Counter,6189087,667,407)
{
Min=-9999999
Max=9999999
link(onNext,4300078:doOperation,[])
}
Add(Math,4300078,709,407)
{
OpType=3
Op2=20
}
Add(MultiElementEx,15305019,303,505)
{
@Hint=#25:Контроль изменения данных|
link(onDcr,6189087:doNext,[(501,511)(501,413)])
link(onInc,6189087:doPrev,[(501,525)(501,420)])
link(Data,4947514:Data3,[(309,361)(307,361)])
}
BEGIN_SDK
Add(EditMultiEx,7156753,6,6)
{
WorkCount=#8:doEvent1|
EventCount=#5:onDcr|7:onEqual|5:onInc|8:onChange|
DataCount=#4:Data|
Width=440
Height=242
link(doEvent1,3955324:doEvent1,[(14,12)(14,83)])
}
Add(Memory,6567996,217,63)
{
link(onData,6381848:doCompare,[(261,69)(261,48)(205,48)(205,27)])
}
Add(DoData,2751385,168,63)
{
link(onEventData,6567996:doValue,[])
link(Data,4073440:Data1,[])
}
Add(DoData,1187485,168,105)
{
link(onEventData,15537973:doValue,[])
link(Data,4073440:Data2,[(174,75)(181,75)])
}
Add(GetData,7079463,301,91)
{
link(Data,15537973:Value,[(307,79)(265,79)(265,149)(223,149)])
}
Add(Switch,1207220,70,77)
{
DataOn=Integer(1)
DataOff=Integer(0)
link(onSwitch,11945411:doEvent,[])
}
Add(IndexToChanel,11945411,112,77)
{
link(onEvent1,2751385:doData,[(156,83)(156,69)])
link(onEvent2,1187485:doData,[(156,90)(156,111)])
}
Add(GetData,4073440,168,21)
{
link(Data,7156753:Data,[(174,13)(12,13)])
}
Add(Memory,15537973,217,105)
{
link(onData,10201425:doCompare,[(261,111)(261,135)(205,135)(205,160)])
}
Add(If_else,10201425,217,154)
{
Type=1
link(onTrue,13220382:doEvent1,[(261,160)(261,195)])
link(Op2,2326711:Data1,[(230,138)(272,138)])
}
Add(If_else,6381848,217,21)
{
Type=2
link(onTrue,7063144:doEvent1,[])
link(Op2,7079463:Data1,[(230,9)(268,9)(268,135)(307,135)])
}
Add(Hub,3955324,21,77)
{
link(onEvent1,1207220:doSwitch,[])
link(onEvent2,14039224:doCompare,[(181,90)(181,167)])
}
Add(If_else,14039224,315,161)
{
link(onTrue,2799023:doEvent1,[])
link(Op1,2326711:Data2,[(321,146)(279,146)])
link(Op2,7079463:Data2,[(328,146)(314,146)])
}
Add(GetData,2326711,266,91)
{
link(Data,6567996:Value,[(272,79)(248,79)(248,107)(223,107)])
}
Add(Hub,2799023,357,161)
{
link(onEvent1,6525598:doEvent3,[(401,167)(401,143)(331,143)(331,118)])
link(onEvent2,7156753:onEqual,[(417,174)(417,19)])
}
Add(Hub,6525598,343,98)
{
InCount=3
OutCount=1
link(onEvent1,7156753:onChange,[(411,104)(411,33)])
}
Add(Hub,7063144,273,21)
{
link(onEvent1,6525598:doEvent1,[(324,27)(324,104)])
link(onEvent2,7156753:onDcr,[(375,34)(375,12)])
}
Add(Hub,13220382,273,189)
{
link(onEvent1,6525598:doEvent2,[(327,195)(327,111)])
link(onEvent2,7156753:onInc,[(375,202)(375,26)])
}
END_SDK
Add(GL_Color,10797479,819,548)
{
Color=32768
link(onColor,4635794:doDraw,[])
}
Add(GL_Color,6053718,819,506)
{
Color=8388736
link(onColor,7606666:doDraw,[])
}
Add(GL_Color,3488729,819,464)
{
Color=255
link(onColor,10697821:doDraw,[])
}
Add(InfoTip,8444026,217,618)
{
Info=#41:Пример создания интерактивных приложений.|23:(мой 1-й компонент :) )|0:|65:Левая кнопка мыши перемещает куб по осям XY, а правая - по оси Z,|22:средняя - вращает куб.|0:|28:User108 (news108@rambler.ru)|0:|23:Москва, 11.8.2007, 0:40|41:Москва, 21.3.2010, 23:00 - добавлен тор |0:|
Width=428
Height=130
}
Add(Memory,8650192,861,226)
{
}
Add(Memory,14479943,903,226)
{
}
Add(DoData,4107186,854,184)
{
link(onEventData,8650192:doValue,[(898,190)(898,211)(849,211)(849,232)])
link(Data,6158151:Var1,[(860,172)(143,172)(143,186)])
}
Add(Hub,2113612,798,205)
{
link(onEvent1,4107186:doData,[(842,211)(842,190)])
link(onEvent2,300524:doData,[(866,218)(866,190)])
}
Add(Hub,12264151,196,100)
{
link(onEvent1,13680259:doClear,[(429,106)(429,141)])
}
Add(DoData,300524,903,184)
{
link(onEventData,14479943:doValue,[(947,190)(947,211)(891,211)(891,232)])
link(Data,6018437:Var3,[(909,179)])
}
Add(MultiElement,15219467,672,651)
{
link(onEvent1,15200808:doDraw,[])
link(Data1,7405542:Data3,[(678,437)(237,437)])
link(Data2,4947514:Data4,[(685,437)(314,437)])
}
BEGIN_SDK
Add(EditMulti,4359962,3,3)
{
EventCount=1
WorkCount=1
DataCount=2
Width=223
Height=109
link(doWork1,3276760:doRotate,[(19,9)(19,55)])
}
Add(GL_Rotate,3276760,35,49)
{
Y=1
link(onRotate,8079493:doRotate,[])
link(Angle,4359962:Data1,[(62,15)(9,15)])
}
Add(GL_Rotate,8079493,112,49)
{
X=1
link(onRotate,4359962:onEvent1,[(189,55)(189,9)])
link(Angle,4359962:Data2,[(139,8)(16,8)])
}
END_SDK
Add(GL_Torus,15200808,721,651)
{
inRadius=0.15
outRadius=0.8
Sides=20
Rings=20
}


Насчет неряшливости схемы - по-моему все аккуратнее некуда. Я музыкант, и у меня нет желания тратить свое время на аккуратное программирование. Компонентов не так много. Поэтому аргумент нечитаема парадоксален. Не нравится - не используй. Я поделился идеей и рабочим кодом, причем не моим, а портированным. Поэтому все вопросы к автору сего кода на дельфи. Комменты в коде оставил для вашего же блага, некоторые наоборот жалуются на их отсутствие. Я даже их перевел.. .
------------ Дoбавленo в 23.12:
Честно говоря, я этим сейчас уже не занимаюсь, поэтому не могу сказать почему твоя схема не работала. Покопайся в моей схеме и сравни со своей.
------------ Дoбавленo в 00.26:
Вот, разобрался почему твоя схема не работала - ты не подсоединил точку OnResize, которая задает нужные параметры. Теперь все работает. Попробуй изменить число N в компоненте с 1-го на 10 получится интересный эффект.. Если захочешь отрисовать другие фигуры - подключи IndexToChannel. Надеюсь схема соответствует на этот раз твоим высшим стандартам читабельности кода.. Спасибо Dilme за Хиасм еще раз! Уникальный инструмент. Иначе пришлось бы стать кодером, и вместо Солнца и Земли видеть 0 и 1... Всем удачи.



Add(MainForm,15261923,154,84)
{
Left=20
Top=105
Width=440
Height=421
Caption="MouseInteractive_simple_test"
Point(MouseX)
Point(MouseY)
Point(onResize)
Point(Handle)
Point(Width)
Point(Height)
Point(onMouseDown)
Point(onMouseUp)
Point(onMouseMove)
link(onCreate,16299401:doEvent1,[(215,104)(215,272)])
link(onResize,9413709:doEvent1,[(222,111)(222,218)])
link(onMouseDown,13366391:doClick,[(268,118)(268,230)])
link(onMouseUp,13680259:doClear,[(306,125)(306,127)])
}
Add(GL_Main,12986311,308,266)
{
link(onInit,12198675:doInit,[])
link(onViewPort,3410847:doPerspective,[(363,279)(363,321)])
link(Handle,15261923:Handle,[(314,203)(174,203)])
}
Add(Timer,9506849,196,315)
{
Interval=50
Enable=1
link(onTimer,1049454:doEvent1,[])
}
Add(GL_GTools,771925,308,315)
{
Point(doClear)
Point(doPushMatrix)
Point(doPopMatrix)
}
Add(Hub,1049454,245,315)
{
OutCount=5
link(onEvent1,771925:doClear,[])
link(onEvent2,771925:doPushMatrix,[])
link(onEvent3,13366391:doDraw,[(319,335)(319,223)])
link(onEvent4,771925:doPopMatrix,[(296,342)(296,335)])
link(onEvent5,12986311:doFlip,[(291,349)(291,286)])
}
Add(Hub,16299401,224,266)
{
OutCount=3
link(onEvent1,12986311:doInit,[])
link(onEvent2,16131419:doWork2,[])
link(onEvent3,9506849:doTimer,[(251,286)(251,304)(186,304)(186,321)])
}
Add(GL_GluTools,12198675,371,266)
{
link(onInit,1101264:doEnabled,[])
}
Add(GL_Light,14989894,567,266)
{
link(onEnabled,4378486:doEnabled,[])
}
Add(GL_Options,1101264,420,266)
{
link(onEvent,5851269:doEnabled,[])
}
Add(GL_Options,5851269,469,266)
{
Flag=1
link(onEvent,5809249:doEnabled,[])
}
Add(GL_Options,5809249,518,266)
{
Flag=2
link(onEvent,14989894:doEnabled,[])
}
Add(MultiElement,10714674,707,140)
{
link(onEvent1,15200808:doDraw,[])
link(Data1,7732851:Var2,[(713,127)(251,127)])
link(Data2,3146508:Var2,[(720,128)(478,128)(478,190)(237,190)])
}
BEGIN_SDK
Add(EditMulti,4359962,3,3)
{
EventCount=1
WorkCount=1
DataCount=2
Width=223
Height=109
link(doWork1,3276760:doRotate,[(19,9)(19,55)])
}
Add(GL_Rotate,3276760,35,49)
{
Y=1
link(onRotate,8079493:doRotate,[])
link(Angle,4359962:Data1,[(62,15)(9,15)])
}
Add(GL_Rotate,8079493,112,49)
{
X=1
link(onRotate,4359962:onEvent1,[(189,55)(189,9)])
link(Angle,4359962:Data2,[(139,8)(16,8)])
}
END_SDK
Add(GL_Perspective,3410847,371,315)
{
Fovy=20
}
Add(HubEx,16131419,273,273)
{
link(onEvent,12986311:doViewPort,[])
}
Add(OGLInteractive,13366391,378,217)
{
link(MouseX,7732851:Var1,[(384,175)(251,175)])
link(MouseY,3146508:Var1,[(391,165)(237,165)])
link(Width,15261923:Width,[(398,177)(181,177)])
link(Height,15261923:Height,[(405,177)(188,177)])
link(DrawN,10714674:doWork1,[(558,223)(558,146)])
link(OnSelect,13680259:doValue,[(454,230)(454,120)])
}
Add(GL_Torus,15200808,763,140)
{
inRadius=0.15
outRadius=0.8
Sides=20
Rings=20
}
Add(GetDataEx,7732851,245,182)
{
Angle=3
link(Data,15261923:MouseX,[(160,187)])
}
Add(GetDataEx,3146508,231,175)
{
Angle=3
link(Data,15261923:MouseY,[(167,180)])
}
Add(GL_Options,4378486,616,266)
{
Flag=3
}
Add(IndexToChanel,12896117,707,184)
{
Count=10
link(onEvent3,7606666:doDraw,[])
}
Add(Hub,9413709,238,212)
{
link(onEvent1,16131419:doWork1,[(277,218)])
link(onEvent2,13366391:onResize,[(315,225)(315,237)])
}
Add(Memory,13680259,497,114)
{
link(onData,15261923:doCaption,[(541,120)(541,67)(142,67)(142,90)])
}
Add(GL_Sphere,7606666,763,198)
{
Radius=0.3
}
Add(InfoTip,8444026,231,408)
{
Info=#70:Обязательно укажите число отрисовываемых объектов в свойствах элемента|0:|28:User108 (news108@rambler.ru)|0:|23:Москва, 11.8.2007, 0:40|23:Москва, 22.3.2010, 0:18|0:|
Width=428
Height=130
}
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 1304
Рейтинг: 405
#4: 2010-03-22 22:52:27 ЛС | профиль | цитата
Aziz, большое спасибо за поправку в примере, компонент работает. Оптимизацией займусь при использовании в более менее большом примере, тогда все ошибки сами повылазят.
Поэтому аргумент нечитаема парадоксален. Не нравится - не используй

не буду
Надеюсь схема соответствует на этот раз твоим высшим стандартам читабельности кода

полностью соотвтствующих я ещё сам не рисовал
Я поделился идеей и рабочим кодом, причем не моим, а портированным. Поэтому все вопросы к автору сего кода на дельфи

Aziz, тупо портировать не разобравшись как работает помоему невозможно, поэтому ещё раз спасибо за проделанную работу с результатом в виде рабочего компонента.
ps: И тебе удачи в том числе и в плане музыки.
карма: 3

0
Гость
Ответов: 17029
Рейтинг: 0
#5: 2010-03-23 10:02:20 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-06-22 14:45:49
карма: 0

0
Ответов: 899
Рейтинг: 43
#6: 2010-03-24 01:46:59 ЛС | профиль | цитата
Aziz писал(а):
3. Модифицированный Counter

лучше обозвать его CounterEx - чтоб не трогать штатный
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 6
Рейтинг: -2
#7: 2010-03-26 15:24:15 ЛС | профиль | цитата
counter просто супер но доделать нужно (побольше свойств )
карма: 0

0
Ответов: 1291
Рейтинг: 47
#8: 2010-03-27 00:45:26 ЛС | профиль | цитата
unalex, да, можно и так, хотя и штатному компоненту эти свойства не повредят - они же по умолчанию отключены - кому надо проставит галки в свойствах и они появятся.
flashMC, какие свойства хотелось бы еще? По-моему больше свойств у счетчика не должно быть..
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 1291
Рейтинг: 47
#9: 2011-09-09 02:26:42 ЛС | профиль | цитата
Добавил новый компонент SharedVar 1.0 (в начале темы).
http://forum.hiasm.com//getfile/25117
Он позволяет создать общие переменные через которые программы могут обмениваться данными через память.
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Разработчик
Ответов: 26148
Рейтинг: 2126
#10: 2011-09-09 02:29:03 ЛС | профиль | цитата
Aziz писал(а):
компонент SharedVar

А что он делает и для чего он нужен
карма: 22

0
Ответов: 1291
Рейтинг: 47
#11: 2011-09-09 02:30:40 ЛС | профиль | цитата
nesco,
Aziz писал(а):
Создает общие переменные через которые программы могут обмениваться данными через память.
Забыл здесь дописать. Обновил архив, добавив еще более простую схему тестирования.
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Разработчик
Ответов: 26148
Рейтинг: 2126
#12: 2011-09-09 03:33:25 ЛС | профиль | цитата
Одна из разновидностей SharedStream, тк использует файл проекции. Кстати, SharedStream прекрасно можно использовать для обмена данными между приложениями через память в качестве переменной с именем CoreName

карма: 22

0
Ответов: 1291
Рейтинг: 47
#13: 2011-09-09 10:49:15 ЛС | профиль | цитата
Да, но там нужно вроде через файл работать, указывая его имя, а тут без, вернее исп-ся файл подкачки. Не могли бы скинуть схемку его использования в качестве переменной?
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Разработчик
Ответов: 26148
Рейтинг: 2126
#14: 2011-09-09 10:55:46 ЛС | профиль | цитата
Aziz писал(а):
Не могли бы скинуть схемку его использования в качестве переменной?

Ай, ай, ай. Плохо читаем справку и смотрим ее примеры
SharedStream, 3-й пример

карма: 22

0
Ответов: 1291
Рейтинг: 47
#15: 2011-09-09 11:04:37 ЛС | профиль | цитата
Спасибо.. Ну да, в принципе, тоже самое. Только элементов побольше. Ну это следствие его универсальности. Его преимущество еще и в том что наверное он быстрее работает, т.к. там используются вставки ассемблера? Но для новичков такой мощный компонент наверное покажется слишком навороченным.

nesco писал(а):
Ай, ай, ай. Плохо читаем справку и смотрим ее примеры

Справку его читал и примеры, но, согласен, подзабыл именно 3 пример..))
А делал я его для работы в своей dll, в виде IC, куда стандартный компонент не пропихнешь, т.к. внешние приложения не видят точки схемы Hiasma в dll. Ну и мне кажется он удобней, для быстрой организации расшаренных переменных, лично для меня, по кр. мере. Благодаря ему и dll Хиасм теперь рулит всеми моими торговыми терминалами Metatrader4, и торговые стратегии можно писать на Delphi или компонентами.. Скорость потрясающая..
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)