MoveOn -> MoveBy

This commit is contained in:
Mikhalkovich Stanislav 2020-11-16 20:04:43 +03:00
parent cf7e002e92
commit 562699d3fa
34 changed files with 176 additions and 132 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "7";
public const string Build = "1";
public const string Revision = "2743";
public const string Revision = "2744";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=7
%REVISION%=2743
%COREVERSION%=1
%REVISION%=2744
%MINOR%=7
%MAJOR%=3

View file

@ -3,9 +3,6 @@ uses Graph3D;
begin
Window.Title := '3D-ďđčěčňčâű';
//var a := Any(0,0,0,Colors.Red);
//a.MoveOn(-5,2,0);
var rr := Rectangle3D(-3.5,-2,0,3,2,Colors.MediumPurple);
rr.Rotate(v3d(0,1,0),30);

View file

@ -49,7 +49,7 @@ begin
a[yy,xx] := Self;
var dx := xx - x;
var dy := yy - y;
f.MoveOn(-dx*2,-dy*2,0);
f.MoveBy(-dx*2,-dy*2,0);
(x,y) := (xx,yy);
Result := Self;
end;
@ -58,7 +58,7 @@ function ChessFigure.AnimMoveTo(xx,yy: integer): ChessFigure;
begin
var dx := xx - x;
var dy := yy - y;
f.AnimMoveOn(-dx*2,-dy*2,0,delay/1000).WhenCompleted(procedure -> begin
f.AnimMoveBy(-dx*2,-dy*2,0,delay/1000).WhenCompleted(procedure -> begin
a[y,x] := nil;
if a[yy,xx]<>nil then
a[yy,xx].Destroy;

View file

@ -1,5 +1,5 @@
uses Graph3D;
// îøèáêà!
uses Graph3D;
// ошибка!
begin
var b := Box(0,0,0,3,1,2,Colors.Blue);
var s := Sphere(0,0,2,1,Colors.Green);
@ -8,12 +8,7 @@ begin
var g := Group(b,s);
var g1 := Group(b1,s1);
g1.MoveOnY(3);
g.Add(g1[0]);// îí äîëæåí îòñîåäèíèòüñÿ îò g!
b1.MoveOnY(3);
{Print(g.l.Count);
Print(g1.l.Count);
Print(g[2].Position);}
//b1.MoveOnZ(3);
g1.MoveByY(3);
g.AddChild(g1[0]);// он должен отсоединиться от g!
b1.MoveByY(3);
end.

View file

@ -2,7 +2,7 @@
begin
var ss := Cube(0,0,0,1.5,Colors.Red);
var anim := ss.AnimMoveOnX(10).AutoReverse.Forever.AccelerationRatio(0.5,0.5);
var anim := ss.AnimMoveByX(10).AutoReverse.Forever.AccelerationRatio(0.5,0.5);
//var anim := ss.AnimScale(3).Forever.AutoReverse;
//var anim := ss.AnimRotate(OrtZ,360).Forever.AutoReverse;
//var anim := ss.AnimRotateAt(OrtZ,360,P3D(3,0,0),2).Forever;

View file

@ -2,6 +2,6 @@
begin
var bb := ArrGen(15,i -> Object3D(Box(0.5*i,0,0,0.1,6,2,RandomColor)));
var g := Group(bb).MoveOnX(-5);
var g := Group(bb).MoveByX(-5);
g.AnimRotateAt(ortZ,360,P3D(-1,0,0),2).Forever.Begin;
end.

View file

@ -3,8 +3,8 @@ uses Graph3D;
begin
var s := Box(0,0,0,3,1,2,Colors.Blue);
var an := Animate.Sequence(
s.AnimMoveOnY(5),
s.AnimMoveOnX(5)
s.AnimMoveByY(5),
s.AnimMoveByX(5)
);
an.Begin;
end.

View file

@ -4,6 +4,6 @@ begin
var jmp := 0.3;
var time := 0.5;
var c := Box(0,0,2,1,2,4,Colors.Green);
var a := c.AnimMoveOnZ(-0.4,time).AutoReverse.Forever * c.AnimScaleZ(0.95,time).AutoReverse.Forever * c.AnimMoveOnX(1*10,time*10);
var a := c.AnimMoveByZ(-0.4,time).AutoReverse.Forever * c.AnimScaleZ(0.95,time).AutoReverse.Forever * c.AnimMoveByX(1*10,time*10);
a.Begin;
end.

View file

@ -11,7 +11,7 @@ begin
var ss := Sphere(0,0,0,1,Colors.Blue);
Sphere(0,0,0,2,DiffuseMaterial(Colors.Yellow)+SpecularMaterial(32));
var g := Group(s,ss);
g.MoveOn(-7,0,0);
g.MoveBy(-7,0,0);
var anim := s.AnimRotateAt(OrtZ,360*100,P3D(-2,0,0),2*100)
* g.AnimRotateAt(OrtZ,360*100,P3D(7,0,0),10*100)
;

View file

@ -1,9 +1,9 @@
uses Graph3D;
uses Graph3D;
begin
var s := Sphere(Origin,1,Colors.Green);
s.AnimMoveOnX(5).WhenCompleted(procedure->s.AnimMoveOnY(5).Begin).Begin;
s.AnimMoveByX(5).WhenCompleted(procedure->s.AnimMoveByY(5).Begin).Begin;
var s1 := s.Clone;
s1.Color := Colors.Blue;
s1.AnimMoveOnX(-5).WhenCompleted(procedure->s1.AnimMoveOnY(-5).Begin).Begin;
s1.AnimMoveByX(-5).WhenCompleted(procedure->s1.AnimMoveByY(-5).Begin).Begin;
end.

View file

@ -1,13 +1,13 @@
uses Graph3D;
uses Graph3D;
begin
var b := Box(0,0,0,3,1,2,Colors.Blue);
var s := Sphere(0,0,2,1,Colors.Green);
var g := Group(b,s);
g.MoveOnY(-4);
g.MoveByY(-4);
var g1 := g.Clone;
g.MoveOnY(3);
g.MoveByY(3);
var gg := Group(g,g1);
gg.MoveOnX(3);
gg.MoveByX(3);
end.

View file

@ -10,7 +10,7 @@ begin
var g1 := Group(b1,s1);
g.AddChild(g1[0]);// он должен отсоединиться от g!
Sleep(1000);
g.MoveOnX(3);
g.MoveByX(3);
Sleep(1000);
g1.MoveOnY(4);
g1.MoveByY(4);
end.

View file

@ -4,6 +4,6 @@ uses Graph3D;
begin
var b := Box(0,0,1,1,3,2,RandomColor);
var b1 := b.Clone;
b1.MoveOn(3,0,0);
b1.MoveBy(3,0,0);
b1.AnimRotate(OrtZ,90).Begin;
end.

View file

@ -7,9 +7,9 @@ begin
s.AddChild(c);
c.AddChild(p);
var s1 := s.Clone;
s1.MoveOnX(2);
s1.MoveByX(2);
var g := Group(s,s1);
var g1 := g.Clone;
g.MoveOnY(-4);
g.MoveByY(-4);
s1.AnimRotateAt(OrtZ,360,P3D(-2,0,0)).Begin;
end.

View file

@ -2,8 +2,8 @@
begin
var b := Box(0,0,0,3,1,2,Colors.Blue);
var b1 := b.Clone.RotateAt(OrtZ,90,P3D(1.5,0,0)).MoveOnX(-0.5);
b1 := b.Clone.RotateAt(OrtZ,-90,P3D(-1.5,0,0)).MoveOnX(0.5);
var b1 := b.Clone.RotateAt(OrtZ,90,P3D(1.5,0,0)).MoveByX(-0.5);
b1 := b.Clone.RotateAt(OrtZ,-90,P3D(-1.5,0,0)).MoveByX(0.5);
View3D.BackgroundColor := Colors.Black;
View3D.ShowGridLines := False;
end.

View file

@ -13,6 +13,6 @@ begin
Inc(m);
end;
var p1 := p.Clone;
p1.MoveOnX(-5);
p1.MoveByX(-5);
p1.AnimRotate(OrtZ,360,10).Forever.Begin;
end.

View file

@ -17,7 +17,7 @@ begin
//end);
foreach var x in l do
x.AnimMoveOn(Random,Random,Random).AutoReverse.Forever.Begin;
x.AnimMoveBy(Random,Random,Random).AutoReverse.Forever.Begin;
//Print(Milliseconds);
end.

View file

@ -5,10 +5,10 @@ begin
var s := Box(0,0,0,3,1,2,Colors.Blue);
OnKeyDown := k ->
case k of
Key.Left: s.MoveOn(1,0,0);
Key.Right: s.MoveOn(-1,0,0);
Key.Up: s.MoveOn(0,-1,0);
Key.Down: s.MoveOn(0,1,0);
Key.Left: s.MoveBy(1,0,0);
Key.Right: s.MoveBy(-1,0,0);
Key.Up: s.MoveBy(0,-1,0);
Key.Down: s.MoveBy(0,1,0);
Key.X: s.Rotate(OrtX,10);
Key.Y: s.Rotate(OrtY,10);
Key.Z: s.Rotate(OrtZ,10);

View file

@ -6,7 +6,7 @@ begin
loop N-1 do
begin
c := c.Clone;
c.MoveOnX(-1.5);
c.MoveByX(-1.5);
if c is ObjectWithMaterial3D then
(c as ObjectWithMaterial3D).Color := RandomColor;
g.AddChild(c);
@ -21,11 +21,11 @@ begin
var g := MultipleClones(c,10);
var gp := MultipleClones(c1,10);
var gg := Group(g,b,gp);
var g1 := gg.Clone.MoveOnY(6);
var g2 := gg.Clone.MoveOnY(-6);
var g1 := gg.Clone.MoveByY(6);
var g2 := gg.Clone.MoveByY(-6);
gg.Rotate(OrtZ,90);
var g3 := gg.Clone.MoveOnX(-6);
gg.MoveOnX(6);
var g3 := gg.Clone.MoveByX(-6);
gg.MoveByX(6);
var ggg := Group(gg,g1,g2,g3);
ggg.Save('Замок.xaml');
//ggg.AnimRotate(OrtZ,360,10).Forever.begin;

View file

@ -10,10 +10,10 @@ begin
OnKeyDown := k -> begin
case k of
Key.Left: c.MoveOn(-2,0);
Key.Right: c.MoveOn(2,0);
Key.Up: c.MoveOn(0,-2);
Key.Down: c.MoveOn(0,2);
Key.Left: c.MoveBy(-2,0);
Key.Right: c.MoveBy(2,0);
Key.Up: c.MoveBy(0,-2);
Key.Down: c.MoveBy(0,2);
end;
end;
@ -21,8 +21,8 @@ begin
var r := Button('Right');
var u := Button('Up');
var d := Button('Down');
l.Click := ()->c.MoveOn(-2,0);
r.Click := ()->c.MoveOn(2,0);
u.Click := ()->c.MoveOn(0,-2);
d.Click := ()->c.MoveOn(0,2);
l.Click := ()->c.MoveBy(-2,0);
r.Click := ()->c.MoveBy(2,0);
u.Click := ()->c.MoveBy(0,-2);
d.Click := ()->c.MoveBy(0,2);
end.

View file

@ -5,7 +5,7 @@ uses WPFObjects;
procedure MoveAll(a,b: integer);
begin
for var j:=0 to Objects.Count-1 do
Objects[j].moveOn(a,b);
Objects[j].moveBy(a,b);
end;
begin
@ -33,7 +33,7 @@ begin
while True do
begin
for var j:=0 to Objects.Count-1 do
Objects[j].MoveOn(Random(-1,1),Random(-1,1));
Objects[j].MoveBy(Random(-1,1),Random(-1,1));
Sleep(10);
end;
end.

View file

@ -17,7 +17,7 @@ begin
loop 900 do
begin
Destroyer.MoveOn(1,0);
Destroyer.MoveBy(1,0);
CheckPulyaIntersects;
Sleep(1);
end;

View file

@ -19,7 +19,7 @@ begin
foreach var o in Objects.Seq do
match o with
CircleWPF(c): c.Radius += 10;
EllipseWPF(e): e.AnimMoveOn(Random(-50,50),Random(-50,50),1);
EllipseWPF(e): e.AnimMoveBy(Random(-50,50),Random(-50,50),1);
RegularPolygonWPF(r) when r.Count<6: r.SetBorder;
end
end.

View file

@ -1,7 +1,7 @@
type
Point = auto class
x,y: integer;
procedure MoveOn(dx,dy: integer) := (x,y) := (x+dx,y+dy);
procedure MoveBy(dx,dy: integer) := (x,y) := (x+dx,y+dy);
function Distance(p: Point) := sqrt(sqr(x-p.x)+sqr(y-p.y));
class function operator implicit(t: (integer,integer)): Point := new Point(t[0],t[1]);
end;

View file

@ -119,7 +119,7 @@ begin
end;
/// Перемещает шарик на вектор (dx,dy)
procedure MoveOn(dx,dy: integer);
procedure MoveBy(dx,dy: integer);
begin
MoveTo(ax+dx,ay+dy);
end;
@ -140,6 +140,6 @@ BEGIN
Delay(20);
if FilledInFront then
ChangeDirection;
MoveOn(vx,vy);
MoveBy(vx,vy);
until KeyPressed;
END.

View file

@ -1 +1 @@
3.7.1.2743
3.7.1.2744

View file

@ -1 +1 @@
!define VERSION '3.7.1.2743'
!define VERSION '3.7.1.2744'

View file

@ -376,8 +376,12 @@ procedure MoveRel(dx,dy: real);
/// Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy). Текущая позиция переносится в новую точку
procedure LineRel(dx,dy: real);
/// Перемещает текущую позицию рисования на вектор (dx,dy)
procedure MoveOn(dx,dy: real);
procedure MoveBy(dx,dy: real);
/// Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy). Текущая позиция переносится в новую точку
procedure LineBy(dx,dy: real);
///--
procedure MoveOn(dx,dy: real);
///--
procedure LineOn(dx,dy: real);
/// Рисует ломаную, заданную массивом точек
@ -1206,6 +1210,8 @@ procedure MoveRel(dx,dy: real) := (Pen.fx,Pen.fy) := (Pen.fx + dx, Pen.fy + dy);
procedure LineRel(dx,dy: real) := LineTo(Pen.fx + dx, Pen.fy + dy);
procedure MoveOn(dx,dy: real) := MoveRel(dx,dy);
procedure LineOn(dx,dy: real) := LineRel(dx,dy);
procedure MoveBy(dx,dy: real) := MoveRel(dx,dy);
procedure LineBy(dx,dy: real) := LineRel(dx,dy);
procedure PolyLine(points: array of Point) := InvokeVisual(PolyLineP,points);
procedure PolyLine(points: array of Point; c: GColor) := InvokeVisual(PolyLinePC,points,c);

View file

@ -289,14 +289,18 @@ type
procedure MoveForward(r: real);
begin
var a := Pi/180*(90-RotateAngle);
MoveOn(r*Cos(a),-r*Sin(a));
MoveBy(r*Cos(a),-r*Sin(a));
end;
/// Перемещает графический объект на вектор (a,b)
procedure MoveOn(a,b: real) := MoveTo(Left+a,Top+b);
procedure MoveBy(a,b: real) := MoveTo(Left+a,Top+b);
/// Перемещает графический объект на вектор (a,b)
procedure MoveBy(v: (real,real)) := MoveTo(Left+v[0],Top+v[1]);
///--
procedure MoveOn(a,b: real) := MoveTo(Left+a,Top+b);
///--
procedure MoveOn(v: (real,real)) := MoveTo(Left+v[0],Top+v[1]);
/// Перемещает графический объект на вектор (dx,dy)
procedure Move; virtual := MoveOn(dx,dy);
procedure Move; virtual := MoveBy(dx,dy);
/// Перемещает графический объект вдоль вектора Direction со скоростью Velocity за время dt
procedure MoveTime(dt: real); virtual;
begin
@ -305,7 +309,7 @@ type
exit;
var dvx := dx/len*Velocity;
var dvy := dy/len*Velocity;
MoveOn(dvx*dt,dvy*dt);
MoveBy(dvx*dt,dvy*dt);
end;
/// Поворачивает графический объект по часовой стрелке на угол a
procedure Rotate(a: real) := RotateAngle += a;
@ -330,7 +334,7 @@ type
procedure Scale(r: real) := ScaleFactor *= r;
private
procedure AnimMoveOnP(a,b,sec: real);
procedure AnimMoveByP(a,b,sec: real);
begin
var ax := new DoubleAnimation(a + transl.X, System.TimeSpan.FromSeconds(sec));
var ay := new DoubleAnimation(b + transl.Y, System.TimeSpan.FromSeconds(sec));
@ -365,12 +369,14 @@ type
end;
public
/// Анимирует перемещение графического объекта на вектор (a,b) в течение sec секунд
procedure AnimMoveOn(a,b: real; sec: real := 1) := Invoke(AnimMoveOnP,a,b,sec);
procedure AnimMoveBy(a,b: real; sec: real := 1) := Invoke(AnimMoveByP,a,b,sec);
///--
procedure AnimMoveOn(a,b: real; sec: real := 1) := Invoke(AnimMoveByP,a,b,sec);
/// Анимирует перемещение графического объекта в направлении RotateAngle (вверх при RotateAngle=0)
procedure AnimMoveForward(r: real);
begin
var a := Pi/180*(90-RotateAngle);
AnimMoveOn(r*Cos(a),-r*Sin(a));
AnimMoveBy(r*Cos(a),-r*Sin(a));
end;
/// Анимирует перемещение графического объекта к точке (x,y) в течение sec секунд
procedure AnimMoveTo(x,y: real; sec: real := 1) := Invoke(AnimMoveToP,x,y,sec);
@ -1269,7 +1275,7 @@ procedure Redraw(p: ()->()) := GraphWPFBase.Invoke(p);
procedure SetLeft(Self: UIElement; l: integer) := Self.SetLeft(l);
procedure SetTop(Self: UIElement; t: integer) := Self.SetTop(t);
function MoveOn(Self: Point; vx,vy: real): Point; extensionmethod;
function MoveBy(Self: Point; vx,vy: real): Point; extensionmethod;
begin
Result.X := Self.X + vx;
Result.Y := Self.Y + vy;

View file

@ -230,11 +230,11 @@ type
procedure SetD(d: real) := Invoke(SetDP, d);
function GetD: real := InvokeReal(()->Cam.Position.DistanceTo(P3D(0, 0, 0)));
procedure MoveOnP(x,y,z: real);
procedure MoveByP(x,y,z: real);
begin
Cam.Position += V3D(x,y,z)//:= P3D(Cam.Position.
end;
procedure MoveOnPV(v: Vector3D);
procedure MoveByPV(v: Vector3D);
begin
Cam.Position += v;
end;
@ -270,9 +270,13 @@ type
property Distanse: real read GetD write SetD;
/// Перемещает камеру на вектор (dx,dy,dz)
procedure MoveOn(dx,dy,dz: real) := Invoke(MoveOnP,dx,dy,dz);
procedure MoveBy(dx,dy,dz: real) := Invoke(MoveByP,dx,dy,dz);
/// Перемещает камеру на вектор v
procedure MoveOn(v: Vector3D) := Invoke(MoveOnPV,v);
procedure MoveBy(v: Vector3D) := Invoke(MoveByPV,v);
///--
procedure MoveOn(dx,dy,dz: real) := Invoke(MoveByP,dx,dy,dz);
///--
procedure MoveOn(v: Vector3D) := Invoke(MoveByPV,v);
/// Обеспечивает плавное движение камеры
procedure AddMoveForce(ForwardForce,RightForce,UpForce: real) := Invoke(AddMoveForceP,RightForce,UpForce,ForwardForce);
/// Обеспечивает плавное движение камеры вперед с некоторой силой
@ -458,15 +462,25 @@ type
/// Перемещает 3D-объект к точке p
function MoveTo(p: Point3D): Object3D := MoveTo(p.X, p.y, p.z);
/// Перемещает 3D-объект на вектор (dx,dy,dz)
function MoveOn(dx, dy, dz: real): Object3D := MoveTo(x + dx, y + dy, z + dz);
function MoveBy(dx, dy, dz: real): Object3D := MoveTo(x + dx, y + dy, z + dz);
/// Перемещает 3D-объект на вектор v
function MoveOn(v: Vector3D): Object3D := MoveOn(v.X, v.Y, v.Z);
function MoveBy(v: Vector3D): Object3D := MoveBy(v.X, v.Y, v.Z);
/// Перемещает x-координату 3D-объекта на dx
function MoveOnX(dx: real): Object3D := MoveOn(dx, 0, 0);
function MoveByX(dx: real): Object3D := MoveBy(dx, 0, 0);
/// Перемещает y-координату 3D-объекта на dy
function MoveOnY(dy: real): Object3D := MoveOn(0, dy, 0);
function MoveByY(dy: real): Object3D := MoveBy(0, dy, 0);
/// Перемещает z-координату 3D-объекта на dz
function MoveOnZ(dz: real): Object3D := MoveOn(0, 0, dz);
function MoveByZ(dz: real): Object3D := MoveBy(0, 0, dz);
///--
function MoveOn(dx, dy, dz: real): Object3D := MoveTo(x + dx, y + dy, z + dz);
///--
function MoveOn(v: Vector3D): Object3D := MoveBy(v.X, v.Y, v.Z);
///--
function MoveOnX(dx: real): Object3D := MoveBy(dx, 0, 0);
///--
function MoveOnY(dy: real): Object3D := MoveBy(0, dy, 0);
///--
function MoveOnZ(dz: real): Object3D := MoveBy(0, 0, dz);
/// Перемещает 3D-объект вдоль вектора Direction со скоростью Velocity за время dt
procedure MoveTime(dt: real); virtual;
begin
@ -479,7 +493,7 @@ type
var dvx := dx/len*Velocity;
var dvy := dy/len*Velocity;
var dvz := dz/len*Velocity;
MoveOn(dvx*dt,dvy*dt,dvz*dt);
MoveBy(dvx*dt,dvy*dt,dvz*dt);
end;
/// Цвет 3D-объекта
property Color: GColor read GetColor write SetColor; virtual;
@ -578,35 +592,35 @@ type
function AnimMoveTrajectory(trajectory: sequence of Point3D; seconds: real := 1): AnimationBase := AnimMoveTrajectory(trajectory,seconds,nil);
/// Возвращает анимацию перемещения объекта на вектор (dx, dy, dz) за seconds секунд. В конце анимации выполняется процедура Completed
function AnimMoveOn(dx, dy, dz: real; seconds: real; Completed: procedure): AnimationBase;
function AnimMoveBy(dx, dy, dz: real; seconds: real; Completed: procedure): AnimationBase;
/// Возвращает анимацию перемещения объекта на вектор (dx, dy, dz) за seconds секунд
function AnimMoveOn(dx, dy, dz: real; seconds: real := 1): AnimationBase := AnimMoveOn(dx,dy,dz,seconds,nil);
function AnimMoveBy(dx, dy, dz: real; seconds: real := 1): AnimationBase := AnimMoveBy(dx,dy,dz,seconds,nil);
/// Возвращает анимацию перемещения объекта на вектор v за seconds секунд. В конце анимации выполняется процедура Completed
function AnimMoveOn(v: Vector3D; seconds: real; Completed: procedure) := AnimMoveOn(v.x, v.y, v.z, seconds, Completed);
function AnimMoveBy(v: Vector3D; seconds: real; Completed: procedure) := AnimMoveBy(v.x, v.y, v.z, seconds, Completed);
/// Возвращает анимацию перемещения объекта на вектор v за seconds секунд
function AnimMoveOn(v: Vector3D; seconds: real := 1) := AnimMoveOn(v.x, v.y, v.z, seconds, nil);
function AnimMoveBy(v: Vector3D; seconds: real := 1) := AnimMoveBy(v.x, v.y, v.z, seconds, nil);
/// Возвращает анимацию перемещения объекта по оси OX на величину dx за seconds секунд. В конце анимации выполняется процедура Completed
function AnimMoveOnX(dx: real; seconds: real; Completed: procedure) := AnimMoveOn(dx, 0, 0, seconds, Completed);
function AnimMoveByX(dx: real; seconds: real; Completed: procedure) := AnimMoveBy(dx, 0, 0, seconds, Completed);
/// Возвращает анимацию перемещения объекта по оси OX на величину dx за seconds секунд
function AnimMoveOnX(dx: real; seconds: real) := AnimMoveOnX(dx, seconds, nil);
function AnimMoveByX(dx: real; seconds: real) := AnimMoveByX(dx, seconds, nil);
/// Возвращает анимацию перемещения объекта по оси OX на величину dx за 1 секунду
function AnimMoveOnX(dx: real) := AnimMoveOnX(dx, 1, nil);
function AnimMoveByX(dx: real) := AnimMoveByX(dx, 1, nil);
/// Возвращает анимацию перемещения объекта по оси OY на величину dy за seconds секунд. В конце анимации выполняется процедура Completed
function AnimMoveOnY(dy: real; seconds: real; Completed: procedure) := AnimMoveOn(0, dy, 0, seconds, Completed);
function AnimMoveByY(dy: real; seconds: real; Completed: procedure) := AnimMoveBy(0, dy, 0, seconds, Completed);
/// Возвращает анимацию перемещения объекта по оси OY на величину dy за seconds секунд
function AnimMoveOnY(dy: real; seconds: real) := AnimMoveOnY(dy, seconds, nil);
function AnimMoveByY(dy: real; seconds: real) := AnimMoveByY(dy, seconds, nil);
/// Возвращает анимацию перемещения объекта по оси OZ на величину dz за 1 секунду
function AnimMoveOnY(dy: real) := AnimMoveOnY(dy, 1, nil);
function AnimMoveByY(dy: real) := AnimMoveByY(dy, 1, nil);
/// Возвращает анимацию перемещения объекта по оси OZ на величину dz за seconds секунд. В конце анимации выполняется процедура Completed
function AnimMoveOnZ(dz: real; seconds: real; Completed: procedure) := AnimMoveOn(0, 0, dz, seconds, Completed);
function AnimMoveByZ(dz: real; seconds: real; Completed: procedure) := AnimMoveBy(0, 0, dz, seconds, Completed);
/// Возвращает анимацию перемещения объекта по оси OZ на величину dz за seconds секунд
function AnimMoveOnZ(dz: real; seconds: real) := AnimMoveOnZ(dz, seconds, nil);
function AnimMoveByZ(dz: real; seconds: real) := AnimMoveByZ(dz, seconds, nil);
/// Возвращает анимацию перемещения объекта по оси OZ на величину dz за 1 секунду
function AnimMoveOnZ(dz: real) := AnimMoveOnZ(dz, 1, nil);
function AnimMoveByZ(dz: real) := AnimMoveByZ(dz, 1, nil);
/// Возвращает анимацию масштабирования объекта на величину sc за seconds секунд. В конце анимации выполняется процедура Completed
function AnimScale(sc: real; seconds: real; Completed: procedure): AnimationBase;
@ -2795,7 +2809,7 @@ function Object3D.AnimMoveTo(x, y, z, seconds: real; Completed: procedure) := ne
function Object3D.AnimMoveTrajectory(trajectory: sequence of Point3D; seconds: real; Completed: procedure) := new OffsetAnimationUsingKeyframes(Self, seconds, trajectory, Completed);
function Object3D.AnimMoveOn(dx, dy, dz, seconds: real; Completed: procedure) := new OffsetAnimationOn(Self, seconds, dx, dy, dz, Completed);
function Object3D.AnimMoveBy(dx, dy, dz, seconds: real; Completed: procedure) := new OffsetAnimationOn(Self, seconds, dx, dy, dz, Completed);
function Object3D.AnimScale(sc, seconds: real; Completed: procedure) := new ScaleAnimation(Self, seconds, sc, Completed);

View file

@ -230,11 +230,11 @@ type
procedure SetD(d: real) := Invoke(SetDP, d);
function GetD: real := InvokeReal(()->Cam.Position.DistanceTo(P3D(0, 0, 0)));
procedure MoveOnP(x,y,z: real);
procedure MoveByP(x,y,z: real);
begin
Cam.Position += V3D(x,y,z)//:= P3D(Cam.Position.
end;
procedure MoveOnPV(v: Vector3D);
procedure MoveByPV(v: Vector3D);
begin
Cam.Position += v;
end;
@ -270,9 +270,13 @@ type
property Distanse: real read GetD write SetD;
/// Перемещает камеру на вектор (dx,dy,dz)
procedure MoveOn(dx,dy,dz: real) := Invoke(MoveOnP,dx,dy,dz);
procedure MoveBy(dx,dy,dz: real) := Invoke(MoveByP,dx,dy,dz);
/// Перемещает камеру на вектор v
procedure MoveOn(v: Vector3D) := Invoke(MoveOnPV,v);
procedure MoveBy(v: Vector3D) := Invoke(MoveByPV,v);
///--
procedure MoveOn(dx,dy,dz: real) := Invoke(MoveByP,dx,dy,dz);
///--
procedure MoveOn(v: Vector3D) := Invoke(MoveByPV,v);
/// Обеспечивает плавное движение камеры
procedure AddMoveForce(ForwardForce,RightForce,UpForce: real) := Invoke(AddMoveForceP,RightForce,UpForce,ForwardForce);
/// Обеспечивает плавное движение камеры вперед с некоторой силой
@ -458,15 +462,25 @@ type
/// Перемещает 3D-объект к точке p
function MoveTo(p: Point3D): Object3D := MoveTo(p.X, p.y, p.z);
/// Перемещает 3D-объект на вектор (dx,dy,dz)
function MoveOn(dx, dy, dz: real): Object3D := MoveTo(x + dx, y + dy, z + dz);
function MoveBy(dx, dy, dz: real): Object3D := MoveTo(x + dx, y + dy, z + dz);
/// Перемещает 3D-объект на вектор v
function MoveOn(v: Vector3D): Object3D := MoveOn(v.X, v.Y, v.Z);
function MoveBy(v: Vector3D): Object3D := MoveBy(v.X, v.Y, v.Z);
/// Перемещает x-координату 3D-объекта на dx
function MoveOnX(dx: real): Object3D := MoveOn(dx, 0, 0);
function MoveByX(dx: real): Object3D := MoveBy(dx, 0, 0);
/// Перемещает y-координату 3D-объекта на dy
function MoveOnY(dy: real): Object3D := MoveOn(0, dy, 0);
function MoveByY(dy: real): Object3D := MoveBy(0, dy, 0);
/// Перемещает z-координату 3D-объекта на dz
function MoveOnZ(dz: real): Object3D := MoveOn(0, 0, dz);
function MoveByZ(dz: real): Object3D := MoveBy(0, 0, dz);
///--
function MoveOn(dx, dy, dz: real): Object3D := MoveTo(x + dx, y + dy, z + dz);
///--
function MoveOn(v: Vector3D): Object3D := MoveBy(v.X, v.Y, v.Z);
///--
function MoveOnX(dx: real): Object3D := MoveBy(dx, 0, 0);
///--
function MoveOnY(dy: real): Object3D := MoveBy(0, dy, 0);
///--
function MoveOnZ(dz: real): Object3D := MoveBy(0, 0, dz);
/// Перемещает 3D-объект вдоль вектора Direction со скоростью Velocity за время dt
procedure MoveTime(dt: real); virtual;
begin
@ -479,7 +493,7 @@ type
var dvx := dx/len*Velocity;
var dvy := dy/len*Velocity;
var dvz := dz/len*Velocity;
MoveOn(dvx*dt,dvy*dt,dvz*dt);
MoveBy(dvx*dt,dvy*dt,dvz*dt);
end;
/// Цвет 3D-объекта
property Color: GColor read GetColor write SetColor; virtual;
@ -578,35 +592,35 @@ type
function AnimMoveTrajectory(trajectory: sequence of Point3D; seconds: real := 1): AnimationBase := AnimMoveTrajectory(trajectory,seconds,nil);
/// Возвращает анимацию перемещения объекта на вектор (dx, dy, dz) за seconds секунд. В конце анимации выполняется процедура Completed
function AnimMoveOn(dx, dy, dz: real; seconds: real; Completed: procedure): AnimationBase;
function AnimMoveBy(dx, dy, dz: real; seconds: real; Completed: procedure): AnimationBase;
/// Возвращает анимацию перемещения объекта на вектор (dx, dy, dz) за seconds секунд
function AnimMoveOn(dx, dy, dz: real; seconds: real := 1): AnimationBase := AnimMoveOn(dx,dy,dz,seconds,nil);
function AnimMoveBy(dx, dy, dz: real; seconds: real := 1): AnimationBase := AnimMoveBy(dx,dy,dz,seconds,nil);
/// Возвращает анимацию перемещения объекта на вектор v за seconds секунд. В конце анимации выполняется процедура Completed
function AnimMoveOn(v: Vector3D; seconds: real; Completed: procedure) := AnimMoveOn(v.x, v.y, v.z, seconds, Completed);
function AnimMoveBy(v: Vector3D; seconds: real; Completed: procedure) := AnimMoveBy(v.x, v.y, v.z, seconds, Completed);
/// Возвращает анимацию перемещения объекта на вектор v за seconds секунд
function AnimMoveOn(v: Vector3D; seconds: real := 1) := AnimMoveOn(v.x, v.y, v.z, seconds, nil);
function AnimMoveBy(v: Vector3D; seconds: real := 1) := AnimMoveBy(v.x, v.y, v.z, seconds, nil);
/// Возвращает анимацию перемещения объекта по оси OX на величину dx за seconds секунд. В конце анимации выполняется процедура Completed
function AnimMoveOnX(dx: real; seconds: real; Completed: procedure) := AnimMoveOn(dx, 0, 0, seconds, Completed);
function AnimMoveByX(dx: real; seconds: real; Completed: procedure) := AnimMoveBy(dx, 0, 0, seconds, Completed);
/// Возвращает анимацию перемещения объекта по оси OX на величину dx за seconds секунд
function AnimMoveOnX(dx: real; seconds: real) := AnimMoveOnX(dx, seconds, nil);
function AnimMoveByX(dx: real; seconds: real) := AnimMoveByX(dx, seconds, nil);
/// Возвращает анимацию перемещения объекта по оси OX на величину dx за 1 секунду
function AnimMoveOnX(dx: real) := AnimMoveOnX(dx, 1, nil);
function AnimMoveByX(dx: real) := AnimMoveByX(dx, 1, nil);
/// Возвращает анимацию перемещения объекта по оси OY на величину dy за seconds секунд. В конце анимации выполняется процедура Completed
function AnimMoveOnY(dy: real; seconds: real; Completed: procedure) := AnimMoveOn(0, dy, 0, seconds, Completed);
function AnimMoveByY(dy: real; seconds: real; Completed: procedure) := AnimMoveBy(0, dy, 0, seconds, Completed);
/// Возвращает анимацию перемещения объекта по оси OY на величину dy за seconds секунд
function AnimMoveOnY(dy: real; seconds: real) := AnimMoveOnY(dy, seconds, nil);
function AnimMoveByY(dy: real; seconds: real) := AnimMoveByY(dy, seconds, nil);
/// Возвращает анимацию перемещения объекта по оси OZ на величину dz за 1 секунду
function AnimMoveOnY(dy: real) := AnimMoveOnY(dy, 1, nil);
function AnimMoveByY(dy: real) := AnimMoveByY(dy, 1, nil);
/// Возвращает анимацию перемещения объекта по оси OZ на величину dz за seconds секунд. В конце анимации выполняется процедура Completed
function AnimMoveOnZ(dz: real; seconds: real; Completed: procedure) := AnimMoveOn(0, 0, dz, seconds, Completed);
function AnimMoveByZ(dz: real; seconds: real; Completed: procedure) := AnimMoveBy(0, 0, dz, seconds, Completed);
/// Возвращает анимацию перемещения объекта по оси OZ на величину dz за seconds секунд
function AnimMoveOnZ(dz: real; seconds: real) := AnimMoveOnZ(dz, seconds, nil);
function AnimMoveByZ(dz: real; seconds: real) := AnimMoveByZ(dz, seconds, nil);
/// Возвращает анимацию перемещения объекта по оси OZ на величину dz за 1 секунду
function AnimMoveOnZ(dz: real) := AnimMoveOnZ(dz, 1, nil);
function AnimMoveByZ(dz: real) := AnimMoveByZ(dz, 1, nil);
/// Возвращает анимацию масштабирования объекта на величину sc за seconds секунд. В конце анимации выполняется процедура Completed
function AnimScale(sc: real; seconds: real; Completed: procedure): AnimationBase;
@ -2795,7 +2809,7 @@ function Object3D.AnimMoveTo(x, y, z, seconds: real; Completed: procedure) := ne
function Object3D.AnimMoveTrajectory(trajectory: sequence of Point3D; seconds: real; Completed: procedure) := new OffsetAnimationUsingKeyframes(Self, seconds, trajectory, Completed);
function Object3D.AnimMoveOn(dx, dy, dz, seconds: real; Completed: procedure) := new OffsetAnimationOn(Self, seconds, dx, dy, dz, Completed);
function Object3D.AnimMoveBy(dx, dy, dz, seconds: real; Completed: procedure) := new OffsetAnimationOn(Self, seconds, dx, dy, dz, Completed);
function Object3D.AnimScale(sc, seconds: real; Completed: procedure) := new ScaleAnimation(Self, seconds, sc, Completed);

View file

@ -376,8 +376,12 @@ procedure MoveRel(dx,dy: real);
/// Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy). Текущая позиция переносится в новую точку
procedure LineRel(dx,dy: real);
/// Перемещает текущую позицию рисования на вектор (dx,dy)
procedure MoveOn(dx,dy: real);
procedure MoveBy(dx,dy: real);
/// Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy). Текущая позиция переносится в новую точку
procedure LineBy(dx,dy: real);
///--
procedure MoveOn(dx,dy: real);
///--
procedure LineOn(dx,dy: real);
/// Рисует ломаную, заданную массивом точек
@ -1206,6 +1210,8 @@ procedure MoveRel(dx,dy: real) := (Pen.fx,Pen.fy) := (Pen.fx + dx, Pen.fy + dy);
procedure LineRel(dx,dy: real) := LineTo(Pen.fx + dx, Pen.fy + dy);
procedure MoveOn(dx,dy: real) := MoveRel(dx,dy);
procedure LineOn(dx,dy: real) := LineRel(dx,dy);
procedure MoveBy(dx,dy: real) := MoveRel(dx,dy);
procedure LineBy(dx,dy: real) := LineRel(dx,dy);
procedure PolyLine(points: array of Point) := InvokeVisual(PolyLineP,points);
procedure PolyLine(points: array of Point; c: GColor) := InvokeVisual(PolyLinePC,points,c);

View file

@ -289,14 +289,18 @@ type
procedure MoveForward(r: real);
begin
var a := Pi/180*(90-RotateAngle);
MoveOn(r*Cos(a),-r*Sin(a));
MoveBy(r*Cos(a),-r*Sin(a));
end;
/// Перемещает графический объект на вектор (a,b)
procedure MoveOn(a,b: real) := MoveTo(Left+a,Top+b);
procedure MoveBy(a,b: real) := MoveTo(Left+a,Top+b);
/// Перемещает графический объект на вектор (a,b)
procedure MoveBy(v: (real,real)) := MoveTo(Left+v[0],Top+v[1]);
///--
procedure MoveOn(a,b: real) := MoveTo(Left+a,Top+b);
///--
procedure MoveOn(v: (real,real)) := MoveTo(Left+v[0],Top+v[1]);
/// Перемещает графический объект на вектор (dx,dy)
procedure Move; virtual := MoveOn(dx,dy);
procedure Move; virtual := MoveBy(dx,dy);
/// Перемещает графический объект вдоль вектора Direction со скоростью Velocity за время dt
procedure MoveTime(dt: real); virtual;
begin
@ -305,7 +309,7 @@ type
exit;
var dvx := dx/len*Velocity;
var dvy := dy/len*Velocity;
MoveOn(dvx*dt,dvy*dt);
MoveBy(dvx*dt,dvy*dt);
end;
/// Поворачивает графический объект по часовой стрелке на угол a
procedure Rotate(a: real) := RotateAngle += a;
@ -330,7 +334,7 @@ type
procedure Scale(r: real) := ScaleFactor *= r;
private
procedure AnimMoveOnP(a,b,sec: real);
procedure AnimMoveByP(a,b,sec: real);
begin
var ax := new DoubleAnimation(a + transl.X, System.TimeSpan.FromSeconds(sec));
var ay := new DoubleAnimation(b + transl.Y, System.TimeSpan.FromSeconds(sec));
@ -365,12 +369,14 @@ type
end;
public
/// Анимирует перемещение графического объекта на вектор (a,b) в течение sec секунд
procedure AnimMoveOn(a,b: real; sec: real := 1) := Invoke(AnimMoveOnP,a,b,sec);
procedure AnimMoveBy(a,b: real; sec: real := 1) := Invoke(AnimMoveByP,a,b,sec);
///--
procedure AnimMoveOn(a,b: real; sec: real := 1) := Invoke(AnimMoveByP,a,b,sec);
/// Анимирует перемещение графического объекта в направлении RotateAngle (вверх при RotateAngle=0)
procedure AnimMoveForward(r: real);
begin
var a := Pi/180*(90-RotateAngle);
AnimMoveOn(r*Cos(a),-r*Sin(a));
AnimMoveBy(r*Cos(a),-r*Sin(a));
end;
/// Анимирует перемещение графического объекта к точке (x,y) в течение sec секунд
procedure AnimMoveTo(x,y: real; sec: real := 1) := Invoke(AnimMoveToP,x,y,sec);
@ -1269,7 +1275,7 @@ procedure Redraw(p: ()->()) := GraphWPFBase.Invoke(p);
procedure SetLeft(Self: UIElement; l: integer) := Self.SetLeft(l);
procedure SetTop(Self: UIElement; t: integer) := Self.SetTop(t);
function MoveOn(Self: Point; vx,vy: real): Point; extensionmethod;
function MoveBy(Self: Point; vx,vy: real): Point; extensionmethod;
begin
Result.X := Self.X + vx;
Result.Y := Self.Y + vy;