Graph3d WPFObjects Invoke

This commit is contained in:
Mikhalkovich Stanislav 2018-12-12 17:45:12 +03:00
parent 16970b7b3d
commit 17bbbdb86f
9 changed files with 73 additions and 15 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "4";
public const string Build = "2";
public const string Revision = "1890";
public const string Revision = "1893";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=4
%REVISION%=1890
%COREVERSION%=2
%REVISION%=1893
%MINOR%=4
%MAJOR%=3

View file

@ -2,15 +2,18 @@
const
/// Количество графических объектов
Count = 300;
Count = 1000;
/// Возвращает случайный графический объект
var w := 50;
function NewRandomABC: ObjectWPF;
begin
case Random(3) of
0: Result := new CircleWPF(Random(Window.Width.Round-30)+10,Random(Window.Height.Round-30)+10,Random(10)+5,RandomColor);
1: Result := new RectangleWPF(Random(Window.Width.Round-30)+10,Random(Window.Height.Round-30)+10,Random(20)+10,Random(20)+10,RandomColor);
2: Result := new StarWPF(Random(Window.Width.Round-30)+10,Random(Window.Height.Round-30)+10,Random(20)+10,Random(10)+5,Random(4)+4,RandomColor);
0: Result := new CircleWPF(Random(Window.Width.Round-w)+w/2,Random(Window.Height.Round-w)+w/2,Random(w/2),RandomColor);
1: Result := new RectangleWPF(Random(Window.Width.Round-w)+w/2,Random(Window.Height.Round-w)+w/2,Random(w),Random(w),RandomColor);
2: Result := new StarWPF(Random(Window.Width.Round-w)+w/2,Random(Window.Height.Round-w)+w/2,Random(w/2),Random(w/2),Random(4)+4,RandomColor);
end;
end;
@ -24,8 +27,8 @@ begin
o.dy := -o.dy;
end;
procedure CreateAll;
begin
Window.Title := 'Движущиеся объекты';
for var i:=1 to Count do
begin
var m: ObjectWPF := NewRandomABC;
@ -34,11 +37,21 @@ begin
m.dy := Random(-3,3);
until (m.dx<>0) and (m.dy<>0);
end;
end;
procedure MoveAll;
begin
for var i:=0 to Objects.Count-1 do
Move(Objects[i]);
end;
begin
Window.Title := 'Движущиеся объекты';
Invoke(CreateAll);
var k := 1;
while True do
begin
for var i:=0 to Objects.Count-1 do
Move(Objects[i]);
Invoke(MoveAll);
k += 1;
Window.Title := Format('{0,5:f2}',k/Milliseconds*1000)+' кадров в секунду';
end;

View file

@ -1 +1 @@
!define VERSION '3.4.2.1890'
!define VERSION '3.4.2.1893'

View file

@ -8581,6 +8581,22 @@ begin
end;
end;
/// Возвращает произведение элементов последовательности
function Product(Self: sequence of real): real; extensionmethod;
begin
Result := 1.0;
foreach var x in Self do
Result *= x;
end;
/// Возвращает произведение элементов последовательности
function Product(Self: sequence of integer): integer; extensionmethod;
begin
Result := 1;
foreach var x in Self do
Result *= x;
end;
/// Возвращает отсортированную по возрастанию последовательность
function Sorted<T>(Self: sequence of T): sequence of T; extensionmethod;
begin
@ -9602,6 +9618,22 @@ begin
Self[i, j] := f(i, j);
end;
/// Применяет действие к каждому элементу двумерного массива
procedure &ForEach<T>(Self: array [,] of T; act: T -> ()); extensionmethod;
begin
for var i := 0 to Self.RowCount - 1 do
for var j := 0 to Self.ColCount - 1 do
act(Self[i, j]);
end;
/// Применяет действие к каждому элементу двумерного массива
procedure &ForEach<T>(Self: array [,] of T; act: (T,integer,integer) -> ()); extensionmethod;
begin
for var i := 0 to Self.RowCount - 1 do
for var j := 0 to Self.ColCount - 1 do
act(Self[i, j],i,j);
end;
// -----------------------------------------------------
//>> Фиктивная секция YYY - не удалять! # YYY
// -----------------------------------------------------
@ -9730,7 +9762,7 @@ begin
end;}
/// Возвращает минимальный элемент
function Min<T>(Self: array of T): T; extensionmethod;where T: System.IComparable<T>;
function Min<T>(Self: array of T): T; extensionmethod; where T: System.IComparable<T>;
begin
Result := Self[0];
for var i := 1 to Self.Length - 1 do
@ -9739,7 +9771,7 @@ begin
end;
/// Возвращает максимальный элемент
function Max<T>(Self: array of T): T; extensionmethod;where T: System.IComparable<T>;
function Max<T>(Self: array of T): T; extensionmethod; where T: System.IComparable<T>;
begin
Result := Self[0];
for var i := 1 to Self.Length - 1 do

View file

@ -77,6 +77,8 @@ function Rect(x,y,w,h: real): GRect;
function ColorBrush(c: Color): GBrush;
//{{{--doc: Конец секции 1 }}}
procedure Invoke(p: ()->());
//{{{doc: Начало секции 2 }}}
type
// -----------------------------------------------------
@ -927,6 +929,8 @@ function Pnt(x,y: real) := new Point(x,y);
function Rect(x,y,w,h: real) := new System.Windows.Rect(x,y,w,h);
function ColorBrush(c: Color) := new SolidColorBrush(c);
procedure Invoke(p: ()->()) := GraphWPFBase.Invoke(p);
procedure SetLeft(Self: UIElement; l: integer) := Self.SetLeft(l);
procedure SetTop(Self: UIElement; t: integer) := Self.SetTop(t);

View file

@ -900,7 +900,8 @@ namespace SymbolTable
((to.symbol_kind == symbol_kind.sk_overload_function) && (add.symbol_kind == symbol_kind.sk_overload_function))
||
((to.symbol_kind == symbol_kind.sk_overload_procedure) && (add.symbol_kind == symbol_kind.sk_overload_procedure))
|| to.sym_info != add.sym_info && to.sym_info is PascalABCCompiler.TreeRealization.function_node && add.sym_info is PascalABCCompiler.TreeRealization.function_node /*&& (to.sym_info as PascalABCCompiler.TreeRealization.function_node).is_extension_method*/ && (add.sym_info as PascalABCCompiler.TreeRealization.function_node).is_extension_method
|| to.sym_info != add.sym_info && to.sym_info is PascalABCCompiler.TreeRealization.function_node && add.sym_info is PascalABCCompiler.TreeRealization.function_node
/*&& (to.sym_info as PascalABCCompiler.TreeRealization.function_node).is_extension_method*/ && (add.sym_info as PascalABCCompiler.TreeRealization.function_node).is_extension_method
);
}

View file

@ -75,6 +75,8 @@ var
//>> Короткие функции модуля Graph3D # Graph3D short functions
// -----------------------------------------------------
procedure Invoke(p: ()->());
/// Возвращает цвет по красной, зеленой и синей составляющей (в диапазоне 0..255)
function RGB(r, g, b: byte): Color;
/// Возвращает цвет по красной, зеленой и синей составляющей и параметру прозрачности (в диапазоне 0..255)
@ -1373,8 +1375,8 @@ type
protected
function CreateObject: Object3D; override := new SphereT(X, Y, Z, Radius, Material.Clone);
constructor := CreateBase(NewVisualObject(1), 0, 0, 0, Materialhelper.CreateMaterial(Colors.Blue));
constructor(x, y, z, r: real; m: Gmaterial) := CreateBase(NewVisualObject(r), x, y, z, m);
public
constructor(x, y, z, r: real; m: Gmaterial) := CreateBase(NewVisualObject(r), x, y, z, m);
/// Радиус сферы
property Radius: real read GetR write SetR;
/// Возвращает клон сферы
@ -2567,6 +2569,8 @@ procedure __FinalizeModule__;
implementation
procedure Invoke(p: ()->()) := GraphWPFBase.Invoke(p);
function RGB(r, g, b: byte) := Color.Fromrgb(r, g, b);
function ARGB(a, r, g, b: byte) := Color.FromArgb(a, r, g, b);
function P3D(x, y, z: real) := new Point3D(x, y, z);

View file

@ -77,6 +77,8 @@ function Rect(x,y,w,h: real): GRect;
function ColorBrush(c: Color): GBrush;
//{{{--doc: Конец секции 1 }}}
procedure Invoke(p: ()->());
//{{{doc: Начало секции 2 }}}
type
// -----------------------------------------------------
@ -927,6 +929,8 @@ function Pnt(x,y: real) := new Point(x,y);
function Rect(x,y,w,h: real) := new System.Windows.Rect(x,y,w,h);
function ColorBrush(c: Color) := new SolidColorBrush(c);
procedure Invoke(p: ()->()) := GraphWPFBase.Invoke(p);
procedure SetLeft(Self: UIElement; l: integer) := Self.SetLeft(l);
procedure SetTop(Self: UIElement; t: integer) := Self.SetTop(t);