В Coords - DrawArc и SeoMouseDown ... для основных обработчиков для независимости от GraphWPF
Вернул пока назад CharAnsi
This commit is contained in:
parent
db0f880b5d
commit
0e066aac48
|
|
@ -9,8 +9,8 @@ begin
|
|||
c := Chr(i);
|
||||
Println($'Символ с кодом {i} в кодировке Unicode - это {c}');
|
||||
Println;
|
||||
i := OrdAnsi(c);
|
||||
i := OrdWindows(c);
|
||||
Println($'Код символа {c} в кодировке Windows равен {i}');
|
||||
c := ChrAnsi(i);
|
||||
c := ChrWindows(i);
|
||||
Println($'Символ с кодом {i} в кодировке Windows - это {c}');
|
||||
end.
|
||||
15
InstallerSamples/WhatsNew/3_11_1/ArcCoords.pas
Normal file
15
InstallerSamples/WhatsNew/3_11_1/ArcCoords.pas
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// Использование DrawArc и ATan2 (3.11.1)
|
||||
uses Coords;
|
||||
|
||||
begin
|
||||
SetMouseDown((x,y,mb) -> begin
|
||||
if mb <> 2 then exit;
|
||||
var xr := ScreenToRealX(x);
|
||||
var yr := ScreenToRealY(y);
|
||||
DrawCircle(xr,yr,0.1,Colors.Red);
|
||||
DrawLine(0,0,xr,yr);
|
||||
var angle := RadToDeg(ATan2(yr,xr));
|
||||
DrawArc(0,0,2,0,angle);
|
||||
Println(angle);
|
||||
end);
|
||||
end.
|
||||
|
|
@ -310,6 +310,45 @@ begin
|
|||
dc.DrawEllipse(cb,cp,p,r,r);
|
||||
end;
|
||||
|
||||
procedure ArcPlay(dc: DrawingContext; x,y,r,startAngle,endAngle: real; c: Color);
|
||||
begin
|
||||
var cp := ColorPen(c,CurrentPenWidth);
|
||||
var center := fso.RealToScreen(Pnt(x,y));
|
||||
r := r * Scale;
|
||||
|
||||
var geometry := new System.Windows.Media.StreamGeometry();
|
||||
var context := geometry.Open();
|
||||
var startAngleRad := startAngle * PI / 180;
|
||||
var endAngleRad := endAngle * PI / 180;
|
||||
var startPoint := new Point(
|
||||
center.X + r * Cos(startAngleRad),
|
||||
center.Y - r * Sin(startAngleRad)
|
||||
);
|
||||
var endPoint := new Point(
|
||||
center.X + r * Cos(endAngleRad),
|
||||
center.Y - r * Sin(endAngleRad)
|
||||
);
|
||||
|
||||
context.BeginFigure(startPoint, false, false);
|
||||
|
||||
var cw := endAngle - startAngle < 0;
|
||||
var dir := System.Windows.Media.SweepDirection.Counterclockwise;
|
||||
if cw then
|
||||
dir := System.Windows.Media.SweepDirection.Clockwise;
|
||||
context.ArcTo(endPoint,
|
||||
new System.Windows.Size(r, r),
|
||||
0,
|
||||
False,
|
||||
dir,
|
||||
true,
|
||||
false
|
||||
);
|
||||
context.Close;
|
||||
|
||||
dc.DrawGeometry(nil, cp, geometry);
|
||||
end;
|
||||
|
||||
|
||||
procedure RectanglePlay(dc: DrawingContext; x,y,w,h: real; c: Color; borderc: Color);
|
||||
begin
|
||||
var cb := ColorBrush(c);
|
||||
|
|
@ -404,6 +443,12 @@ type
|
|||
public
|
||||
procedure Play(dc: DrawingContext); override := LinePlay(dc,x,y,x1,y1,c,width);
|
||||
end;
|
||||
ArcC = auto class(Command)
|
||||
x,y,radius,startAngle,endAngle: real;
|
||||
c: Color;
|
||||
public
|
||||
procedure Play(dc: DrawingContext); override := ArcPlay(dc,x,y,radius,startAngle,endAngle,c);
|
||||
end;
|
||||
TextC = auto class(Command)
|
||||
x,y: real;
|
||||
text: string;
|
||||
|
|
@ -533,6 +578,11 @@ begin
|
|||
DrawPoints(points,PointRadius);
|
||||
end;
|
||||
|
||||
/// Рисует дугу
|
||||
procedure DrawArc(x,y,r,startAngle,endAngle: real; Color: GColor := Colors.Black)
|
||||
:= ArcC.Create(x,y,r,startAngle,endAngle,Color).AddToListAndPlay;
|
||||
|
||||
|
||||
/// Расстояние между точками
|
||||
function Distance(p1,p2: Point): real := Sqrt((p2.x-p1.x)**2 + (p2.y-p1.y)**2);
|
||||
/// Расстояние между точками
|
||||
|
|
@ -672,6 +722,39 @@ type
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure SetMouseDown(handler: (real,real,integer) -> ());
|
||||
begin
|
||||
OnMouseDown += handler;
|
||||
end;
|
||||
|
||||
procedure SetMouseUp(handler: (real,real,integer) -> ());
|
||||
begin
|
||||
OnMouseUp += handler;
|
||||
end;
|
||||
|
||||
procedure SetMouseMove(handler: (real,real,integer) -> ());
|
||||
begin
|
||||
OnMouseMove += handler;
|
||||
end;
|
||||
|
||||
procedure SetKeyPress(handler: char -> ());
|
||||
begin
|
||||
OnKeyPress += handler;
|
||||
end;
|
||||
|
||||
procedure SetKeyDown(handler: Key -> ());
|
||||
begin
|
||||
OnKeyDown += handler;
|
||||
end;
|
||||
|
||||
function RealToScreenX(xx: real) := fso.RealToScreenX(xx);
|
||||
function RealToScreenY(yy: real) := fso.RealToScreenY(yy);
|
||||
function ScreenToRealX(xx: real) := fso.ScreenToRealX(xx);
|
||||
function ScreenToRealY(yy: real) := fso.ScreenToRealY(yy);
|
||||
function ScreenToReal(p: Point): Point := fso.ScreenToReal(p);
|
||||
function RealToScreen(p: Point): Point := fso.RealToScreen(p);
|
||||
|
||||
|
||||
initialization
|
||||
InitCoordGrid;
|
||||
Window.Title := 'Система координат';
|
||||
|
|
|
|||
|
|
@ -2123,6 +2123,12 @@ function Succ(x: char): char;
|
|||
function ChrWindows(a: byte): char;
|
||||
/// Преобразует символ в код в кодировке Windows
|
||||
function OrdWindows(a: char): byte;
|
||||
|
||||
/// Преобразует код в символ в кодировке Windows. Устарело. Используйте ChrWindows
|
||||
function ChrAnsi(a: byte): char;
|
||||
/// Преобразует символ в код в кодировке Windows. Устарело. Используйте OrdWindows
|
||||
function OrdAnsi(a: char): byte;
|
||||
|
||||
/// Преобразует код в символ в кодировке Unicode
|
||||
function Chr(a: word): char;
|
||||
/// Преобразует символ в код в кодировке Unicode
|
||||
|
|
@ -9960,6 +9966,11 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function ChrAnsi(a: byte): char := ChrWindows(a);
|
||||
|
||||
function OrdAnsi(a: char): byte := OrdWindows(a);
|
||||
|
||||
|
||||
function Ord(a: integer): integer;
|
||||
begin
|
||||
Result := a;
|
||||
|
|
|
|||
Loading…
Reference in a new issue