Вверх ↑
Ответов: 8945
Рейтинг: 824
#1: 2021-08-01 00:07:19 ЛС | профиль | цитата
Pavel, вот с использованием OpenGL на 600 точек (масштаб колёсиком, перемещение ползунками, до 64 строк/сек).
И не забываем, что есть ось "Z", по которой можно положить несколько графиков.
GL


Add(MainForm,15261923,196,112)
{
 Left=20
 Top=20
 Width=600
 Height=454
 Caption="КартинкаGL"
 Point(onMouseWheel)
 link(onCreate,16313935:doWork1,[])
 link(onMouseWheel,8435041:doScale,[(235,139)(235,384)])
}
Add(StrList,1458062,357,126)
{
}
Add(Image,8168712,385,252)
{
 Left=20
 Top=61
 Width=562
 Height=355
 ViewStyle=4
 Point(Handle)
 Point(MouseX)
 Point(MouseY)
 Point(onMouseUp)
 Point(onMouseDown)
 Point(onMouseMove)
 link(Bitmap,5213144:Bitmap,[])
 link(onMouseUp,14362898:doWork1,[])
 link(onMouseDown,14362898:doWork2,[])
 link(onMouseMove,5339163:doCompare,[(431,279)(431,307)])
}
Add(ChanelToIndex,14362898,441,259)
{
 link(onIndex,9790564:doValue,[])
}
Add(Memory,9790564,490,259)
{
 Default=Integer(0)
}
Add(If_else,5339163,490,301)
{
 Op2=Integer(1)
 link(onTrue,8435041:doMouse,[(529,307)(529,342)(375,342)(375,370)])
 link(Op1,9790564:Value,[])
}
Add(MultiElementEx,8435041,385,364)
{
 link(Array,1458062:Array,[(391,313)(377,313)])
 link(Handle,8168712:Handle,[])
 link(CoordX,8168712:MouseX,[])
 link(CoordY,8168712:MouseY,[])
 link(TranslateX,14456561:Result,[(419,348)(487,348)])
 link(TranslateY,6533203:Result,[(426,355)(566,355)])
 link(onEnd,3471472:doEvent1,[])
}
BEGIN_SDK
  Add(EditMultiEx,11996247,14,7)
  {
   WorkCount=#7:doMouse|5:doJMG|7:doScale|
   EventCount=#5:onEnd|
   DataCount=#5:Array|6:Handle|6:CoordX|6:CoordY|10:TranslateX|10:TranslateY|
   Width=832
   Height=284
   VOffset=35
   HOffset=155
   link(doMouse,4735359:doValue,[(179,48)(179,55)(214,55)(214,62)])
   link(doJMG,14325692:doEvent1,[(39,55)(39,153)])
   link(doScale,14855729:doCalc,[(207,62)(207,76)(305,76)(305,55)])
  }
  Add(GL_Main,5754056,182,147)
  {
   Color=0
   link(onInit,13520164:doInit,[])
   link(onViewPort,1353664:doPerspective,[(237,160)(237,202)])
   link(Handle,11996247:Handle,[(188,138)(174,138)(174,40)(182,40)])
  }
  Add(Timer,10100784,91,196)
  {
   Interval=10
   Enable=1
   link(onTimer,14974901:doEvent1,[])
  }
  Add(GL_GTools,5073611,182,196)
  {
   Point(doClear)
   Point(doPushMatrix)
   Point(doPopMatrix)
  }
  Add(Hub,14974901,133,196)
  {
   OutCount=6
   link(onEvent1,5073611:doClear,[])
   link(onEvent2,5073611:doPushMatrix,[])
   link(onEvent3,6551869:doTranslate,[(158,216)(158,188)(284,188)(284,111)])
   link(onEvent4,5073611:doPopMatrix,[(170,223)(170,216)])
   link(onEvent5,5754056:doFlip,[(165,230)(165,167)])
   link(onEvent6,11996247:onEnd,[(823,237)(823,48)])
  }
  Add(Hub,14325692,49,147)
  {
   OutCount=3
   link(onEvent1,5754056:doInit,[])
   link(onEvent2,5754056:doViewPort,[])
   link(onEvent3,10100784:doTimer,[(81,167)(81,202)])
  }
  Add(GL_GluTools,13520164,245,147)
  {
   Texture=0
   link(onInit,964847:doEnabled,[])
  }
  Add(GL_Light,137856,336,147)
  {
   Diffuse=65280
  }
  Add(GL_Options,964847,294,147)
  {
   Flag=2
   link(onEvent,137856:doEnabled,[])
  }
  Add(MultiElement,14576462,245,105)
  {
   link(Data1,4735359:Value,[(251,96)(230,96)])
   link(Data2,13577233:Value,[(258,96)(272,96)])
  }
  BEGIN_SDK
    Add(EditMulti,11760529,10,10)
    {
     EventCount=1
     WorkCount=1
     DataCount=2
     Width=223
     Height=109
     link(doWork1,5590513:doRotate,[(26,16)(26,62)])
    }
    Add(GL_Rotate,5590513,42,56)
    {
     Y=1
     link(onRotate,346824:doRotate,[])
     link(Angle,11760529:Data1,[(48,33)(16,33)])
    }
    Add(GL_Rotate,346824,119,56)
    {
     X=1
     link(onRotate,11760529:onEvent1,[(196,62)(196,16)])
     link(Angle,11760529:Data2,[(125,33)(23,33)])
    }
  END_SDK
  Add(GL_Perspective,1353664,245,196)
  {
   Fovy=25
  }
  Add(Gl_Begin,11774056,504,105)
  {
   BlockType=2
   link(onBegin,13350121:doEnum,[])
  }
  Add(GL_Vertex3D,11725528,700,189)
  {
   link(X,16709307:Result,[])
   link(Y,6790657:Result,[(713,173)(748,173)])
   link(Z,13083751:Result,[(720,180)(790,180)])
  }
  Add(Gl_End,13828792,609,147)
  {
  }
  Add(ArrayEnum,13350121,560,105)
  {
   Type=1
   link(onItem,7629252:doEvent1,[])
   link(onEndEnum,13828792:doEnd,[(599,118)(599,153)])
   link(Array,11996247:Array,[(566,34)(175,34)])
  }
  Add(Hub,7629252,609,105)
  {
   link(onEvent1,4749971:doSplit,[(634,111)(634,55)])
   link(onEvent2,3118699:doColor,[(648,118)(648,195)])
  }
  Add(Math,6790657,742,126)
  {
   OpType=3
   Op2=200
   link(onResult,13083751:doOperation,[])
   link(Op1,4749971:Part2,[(748,110)(713,110)])
   link(Op2,7147964:Var2,[])
  }
  Add(Math,13083751,784,126)
  {
   OpType=3
   Op2=15
   link(Op1,4749971:Part3,[(790,103)(720,103)])
   link(Op2,7147964:Var3,[(797,117)])
  }
  Add(GL_Color,3118699,658,189)
  {
   Color=16777215
   link(onColor,11725528:doVertex,[])
   link(Color,4749971:Part4,[(664,89)(727,89)])
  }
  Add(MultiStrPart,4749971,700,49)
  {
   Count=4
   link(onSplit,16709307:doCalc,[(739,55)(739,97)(683,97)(683,132)])
  }
  Add(GetDataEx,7147964,749,112)
  {
   link(Data,10337216:Value,[])
  }
  Add(Memory,4735359,224,56)
  {
   Point(Data)
   link(onData,13577233:doValue,[])
   link(Data,11996247:CoordX,[(230,47)(189,47)])
  }
  Add(Memory,13577233,266,56)
  {
   Point(Data)
   link(Data,11996247:CoordY,[(272,40)(196,40)])
  }
  Add(Memory,10337216,749,49)
  {
   Default=Integer(100)
  }
  Add(Gl_Scale,6749172,399,105)
  {
   X=1
   Y=1
   Z=1
   link(onScale,15429184:doLineSize,[])
   link(X,8649621:Var1,[(405,89)])
   link(Y,8649621:Var2,[])
   link(Z,8649621:Var3,[(419,89)])
  }
  Add(MathParse,14855729,406,49)
  {
   DataCount=1
   MathStr="%0*exp(%1*0.00079425)"
   Default=1
  }
  Add(GetDataEx,8649621,406,84)
  {
   link(Data,14855729:Result,[])
  }
  Add(GL_PrimSizes,15429184,455,105)
  {
   Size=2
   link(onSize,11774056:doBegin,[])
  }
  Add(Gl_Translate,6551869,350,105)
  {
   X=1
   Y=1
   link(onTranslate,6749172:doScale,[])
   link(X,11996247:TranslateX,[(356,26)(203,26)])
   link(Y,11996247:TranslateY,[(363,19)(210,19)])
  }
  Add(MathParse,16709307,700,126)
  {
   MathStr="(%1-300)/%2"
   link(onResult,6790657:doOperation,[])
   link(X1,13350121:Index,[(706,117)(699,117)(699,145)(573,145)])
   link(X2,7147964:Var1,[(713,117)])
  }
END_SDK
Add(Button,14316988,266,196)
{
 Left=5
 Top=5
 Width=75
 Caption="Отобразить"
 link(onClick,7488654:doEvent1,[])
}
Add(Bitmap,5213144,385,203)
{
 HWidth=600
 HHeight=400
 Point(Width)
 Point(Height)
 Point(doCreate)
}
Add(Hub,7488654,322,196)
{
 OutCount=4
 link(onEvent1,1458062:doClear,[(347,202)(347,139)])
 link(onEvent2,5213144:doCreate,[(368,209)(368,223)])
 link(onEvent3,8168712:doLoad,[(361,216)(361,258)])
 link(onEvent4,16313935:doWork2,[(347,223)(347,237)(256,237)(256,139)])
}
Add(ScrollBar,1983831,434,210)
{
 Left=10
 Top=45
 Width=570
 Min=-200
 Page=10
 link(onPosition,14456561:doOperation,[])
}
Add(ScrollBar,6625439,518,210)
{
 Top=45
 Width=20
 Height=365
 Min=-200
 Page=10
 Kind=1
 link(onPosition,6533203:doOperation,[])
}
Add(Math,14456561,476,210)
{
 OpType=3
 Op2=50
}
Add(Math,6533203,560,210)
{
 OpType=3
 Op2=-50
}
Add(MultiElement,16313935,266,126)
{
 @Hint=#31:Заполнение 600 случайнымх точек|32:Иммитация считывания поступающих|26:данных по команде блока GL|
 link(onEvent1,1458062:doAdd,[])
 link(onEvent2,8435041:doJMG,[(305,139)(305,377)])
 link(onEvent3,1458062:doDelete,[])
}
BEGIN_SDK
  Add(EditMulti,1486386,21,21)
  {
   EventCount=3
   WorkCount=3
   Width=405
   Height=256
   link(doWork1,3519740:doRandomize,[(185,27)(185,125)])
   link(doWork2,14844364:doFor,[(53,34)(53,118)])
   link(doWork3,6407052:doEvent1,[])
  }
  Add(FormatStr,111795,357,119)
  {
   DataCount=3
   Mask="%1;%2;0;%3"
   link(onFString,1486386:onEvent1,[(410,125)(410,27)])
   link(Str1,14166143:Result,[(363,103)(279,103)(279,152)(132,152)])
   link(Str2,10904136:Result,[(370,110)(349,110)(349,159)(293,159)])
   link(Str3,12746096:Value,[])
  }
  Add(For,14844364,63,112)
  {
   End=599
   link(onEvent,14092551:doWork2,[])
   link(onStop,1486386:onEvent2,[(102,125)(102,34)])
  }
  Add(Random,3519740,196,112)
  {
   Min=-10
   Max=10
   Mode=1
   link(onRandom,15210140:doEvent1,[])
  }
  Add(Memory,12746096,371,56)
  {
  }
  Add(MathParse,10904136,287,119)
  {
   DataCount=1
   MathStr="%1 + %0"
   link(onResult,111795:doString,[])
  }
  Add(If_else,10620772,273,56)
  {
   Type=1
   Op2=Integer(0)
   link(onTrue,10160487:doData,[])
   link(onFalse,16561591:doData,[])
  }
  Add(DoData,10160487,315,56)
  {
   Data=Integer(255)
   link(onEventData,15162297:doWork2,[])
  }
  Add(DoData,16561591,322,63)
  {
   Data=Integer(65280)
   link(onEventData,15162297:doWork3,[(361,69)])
  }
  Add(Hub,15210140,238,112)
  {
   link(onEvent1,10620772:doCompare,[(263,118)(263,62)])
   link(onEvent2,10904136:doCalc,[])
  }
  Add(HubEx,15162297,357,56)
  {
   link(onEvent,12746096:doValue,[])
  }
  Add(Math,14166143,126,112)
  {
   OpType=1
   Op2=300
   link(onResult,3519740:doRandom,[])
  }
  Add(HubEx,14092551,105,112)
  {
   link(onEvent,14166143:doOperation,[])
  }
  Add(Hub,6407052,70,35)
  {
   link(onEvent1,14092551:doWork1,[(109,41)])
   link(onEvent2,12024395:doData,[])
  }
  Add(DoData,12024395,126,42)
  {
   Data=Integer(0)
   link(onEventData,1486386:onEvent3,[(417,48)(417,41)])
  }
END_SDK
Add(Label,1034859,616,420)
{
 Left=145
 Top=10
}
Add(Hub,3471472,441,364)
{
 link(onEvent1,16313935:doWork3,[(466,370)(466,405)(249,405)(249,146)])
 link(onEvent2,10250351:doNext,[])
}
Add(Counter,10250351,525,371)
{
 Max=999
}
Add(StrCat,4119005,574,420)
{
 Str2=" строк/сек"
 link(onStrCat,1034859:doText,[])
}
Add(Timer,14493765,448,420)
{
 link(onTimer,1988639:doEvent1,[])
}
Add(DoData,5125283,525,420)
{
 link(onEventData,4119005:doStrCat,[])
 link(Data,10250351:Count,[])
}
Add(Hub,1988639,490,420)
{
 link(onEvent1,5125283:doData,[])
 link(onEvent2,10250351:doReset,[(515,433)(515,391)])
}

карма: 19

1
Голосовали:Pavel