Graph3D LocalAxisX Y Z, MoveByLocal

Turtle - цвет
pt4pabc.dll новая
This commit is contained in:
Mikhalkovich Stanislav 2022-10-19 15:05:42 +03:00
parent c315db5245
commit 16b45eaa14
20 changed files with 145 additions and 23 deletions

View file

@ -5,7 +5,7 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("PascalABC.NET Compiler")]
[assembly: AssemblyCopyright("Copyright © 2005-2022 by Ivan Bondarev, Stanislav Mihalkovich")]
[assembly: AssemblyCopyright("Copyright © 2005-2021 by Ivan Bondarev, Stanislav Mihalkovich")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion(RevisionClass.FullVersion)]
@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "8";
public const string Build = "3";
public const string Revision = "3181";
public const string Revision = "3191";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=8
%REVISION%=3181
%REVISION%=3191
%COREVERSION%=3
%MAJOR%=3

Binary file not shown.

View file

@ -41,11 +41,15 @@
<tr><td><code><b>function</b> Cartesian&lt;T&gt;(Self: <b>array</b> <b>of</b> T; n: integer): <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò n-òóþ äåêàðòîâó ñòåïåíü ìíîæåñòâà ýëåìåíòîâ, çàäàííîãî ìàññèâîì</td></tr>
<tr><td><code><b>function</b> Cartesian&lt;T&gt;(Self: <b>sequence </b> <b>of</b> T; n: integer): <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает n-тую декартову степень множества элементов, заданного массивом</td></tr>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò n-òóþ äåêàðòîâó ñòåïåíü ìíîæåñòâà ýëåìåíòîâ, çàäàííîãî ïîñëåäîâàòåëüíîñòüþ</td></tr>
<tr><td><code><b>function</b> Cartesian(Self: string; n: integer): <b>sequence </b> <b>of</b> string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò n-òóþ äåêàðòîâó ñòåïåíü ìíîæåñòâà ñèìâîëîâ, çàäàííîãî ñòðîêîé</td></tr>
<tr><td><code><b>function</b> Combinations&lt;T&gt;(Self: <b>array</b> <b>of</b> T; m: integer): <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò âñå ñî÷åòàíèÿ ïî m ýëåìåíòîâ</td></tr>
<tr><td><code><b>function</b> Combinations&lt;T&gt;(Self: <b>sequence </b> <b>of</b> T; m: integer): <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò âñå ñî÷åòàíèÿ ïî m ýëåìåíòîâ</td></tr>
<tr><td><code><b>function</b> Combinations(Self: string; m: integer): <b>sequence </b> <b>of</b> string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò âñå ñî÷åòàíèÿ ïî m ýëåìåíòîâ</td></tr>
<tr><td><code><b>function</b> ConvertAll&lt;T, T1&gt;(Self: <b>array</b> <b>of</b> T; converter: T-&gt;T1): <b>array</b> <b>of</b> T1;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ïðåîáðàçóåò ýëåìåíòû ìàññèâà è âîçâðàùàåò ïðåîáðàçîâàííûé ìàññèâ</td></tr>
<tr><td><code><b>function</b> ConvertAll&lt;T, T1&gt;(Self: <b>array</b> <b>of</b> T; converter: (T,integer)-&gt;T1): <b>array</b> <b>of</b> T1;</code>
@ -122,6 +126,10 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò âñå ÷àñòè÷íûå ïåðåñòàíîâêè èç n ýëåìåíòîâ ïî m</td></tr>
<tr><td><code><b>function</b> Permutations&lt;T&gt;(Self: <b>sequence </b> <b>of</b> T; m: integer): <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò âñå ÷àñòè÷íûå ïåðåñòàíîâêè èç n ýëåìåíòîâ ïî m</td></tr>
<tr><td><code><b>function</b> Permutations(Self: string): <b>sequence </b> <b>of</b> string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò âñå ïåðåñòàíîâêè áóêâ â ñòðîêå â âèäå ïîñëåäîâàòåëüíîñòè ñòðîê</td></tr>
<tr><td><code><b>function</b> Permutations(Self: string; m: integer): <b>sequence </b> <b>of</b> string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò âñå ÷àñòè÷íûå ïåðåñòàíîâêè áóêâ ñòðîêè ïî m ñèìâîëîâ â âèäå ïîñëåäîâàòåëüíîñòè ñòðîê</td></tr>
<tr><td><code><b>function</b> RandomElement&lt;T&gt;(Self: <b>array</b> <b>of</b> T): T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñëó÷àéíûé ýëåìåíò ìàññèâà</td></tr>
<tr><td><code><b>function</b> Shuffle&lt;T&gt;(Self: <b>array</b> <b>of</b> T): <b>array</b> <b>of</b> T;</code>

View file

@ -31,9 +31,13 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ èç count ýëåìåíòîâ, íà÷èíàþùèõñÿ ñ first è second, ñ ôóíêöèåé next ïåðåõîäà îò äâóõ ïðåäûäóùèõ ê ñëåäóþùåìó</td></tr>
<tr><td><code><b>function</b> ArrRandom(n: integer := 10; a: integer := 0; b: integer := 100): <b>array</b> <b>of</b> integer;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ ðàçìåðà n, çàïîëíåííûé ñëó÷àéíûìè öåëûìè çíà÷åíèÿìè</td></tr>
<tr><td><code><b>function</b> ArrRandomInteger(n: integer := 10; a: integer := 0; b: integer := 100): <b>array</b> <b>of</b> integer;</code>
<tr><td><code><b>function</b> ArrRandomInteger(n: integer; a: integer; b: integer): <b>array</b> <b>of</b> integer;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ ðàçìåðà n, çàïîëíåííûé ñëó÷àéíûìè öåëûìè çíà÷åíèÿìè</td></tr>
<tr><td><code><b>function</b> ArrRandomReal(n: integer := 10; a: real := 0; b: real := 10): <b>array</b> <b>of</b> real;</code>
<tr><td><code><b>function</b> ArrRandomInteger(n: integer := 10): <b>array</b> <b>of</b> integer;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ ðàçìåðà n, çàïîëíåííûé ñëó÷àéíûìè öåëûìè çíà÷åíèÿìè</td></tr>
<tr><td><code><b>function</b> ArrRandomReal(n: integer; a: real; b: real): <b>array</b> <b>of</b> real;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ ðàçìåðà n, çàïîëíåííûé ñëó÷àéíûìè âåùåñòâåííûìè çíà÷åíèÿìè</td></tr>
<tr><td><code><b>function</b> ArrRandomReal(n: integer := 10): <b>array</b> <b>of</b> real;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ ðàçìåðà n, çàïîëíåííûé ñëó÷àéíûìè âåùåñòâåííûìè çíà÷åíèÿìè</td></tr>
<tr><td><code><b>function</b> ReadArrInt64(n: integer): <b>array</b> <b>of</b> int64;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìàññèâ èç n öåëûõ int64, ââåäåííûõ ñ êëàâèàòóðû</td></tr>

View file

@ -1,9 +1,9 @@
//
// This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301
// Machine: DESKTOP-2BJCJ7I
// DateTime: 11.09.2022 12:57:49
// UserName: ibond
// Machine: DESKTOP-G8V08V4
// DateTime: 04.10.2022 20:11:12
// UserName: ?????????
// GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource>
//

View file

@ -3268,6 +3268,8 @@ expr_l1
{ $$ = $1; }
| new_question_expr
{ $$ = $1; }
// | var_stmt tkComma expr_l1
// { $$ = $3; }
;
expr_l1_for_question_expr

View file

@ -1,10 +1,10 @@
// (see accompanying GPPGcopyright.rtf)
// GPPG version 1.3.6
// Machine: DESKTOP-2BJCJ7I
// DateTime: 11.09.2022 12:57:50
// UserName: ibond
// Input file <ABCPascal.y>
// Machine: DESKTOP-G8V08V4
// DateTime: 04.10.2022 20:11:12
// UserName: ?????????
// Input file <D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y>
// options: no-lines gplex
@ -60,7 +60,7 @@ public abstract class ScanBase : AbstractScanner<PascalABCSavParser.Union,LexLoc
public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, LexLocation>
{
// Verbatim content from ABCPascal.y
// Verbatim content from D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> GPPGParser, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> gppg
public syntax_tree_node root; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@ -72,7 +72,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
public ParserLambdaHelper lambdaHelper = new ParserLambdaHelper();
public GPPGParser(AbstractScanner<PascalABCSavParser.Union, LexLocation> scanner) : base(scanner) { }
// End verbatim content from ABCPascal.y
// End verbatim content from D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y
#pragma warning disable 649
private static Dictionary<int, string> aliasses;

View file

@ -360,5 +360,6 @@ script=

View file

@ -1 +1 @@
3.8.3.3181
3.8.3.3191

Binary file not shown.

View file

@ -1 +1 @@
!define VERSION '3.8.3.3181'
!define VERSION '3.8.3.3191'

View file

@ -562,6 +562,50 @@ type
end;
/// Цвет 3D-объекта
property Color: GColor read GetColor write SetColor; virtual;
/// Локальная ось X в глобальных координатах
property LocalAxisX: Vector3D
read Invoke&<Vector3D>(()->model.GetTransform.Transform(new Vector3D(1,0,0)));
/// Локальная ось X в глобальных координатах
property LocalAxisY: Vector3D
read Invoke&<Vector3D>(()->model.GetTransform.Transform(new Vector3D(0,1,0)));
/// Локальная ось X в глобальных координатах
property LocalAxisZ: Vector3D
read Invoke&<Vector3D>(()->model.GetTransform.Transform(new Vector3D(0,0,1)));
/// Перемещает 3D-объект к точке (x,y,z) в локальных координатах
procedure MoveToLocal(x,y,z: real);
begin
var p := Invoke&<Point3D>(()->model.GetTransform.Transform(new Point3D(x,y,z)));
MoveTo(p);
end;
/// Перемещает 3D-объект к точке p в локальных координатах
procedure MoveToLocal(p: Point3D) := MoveToLocal(p.x,p.y,p.z);
/// Перемещает 3D-объект на вектор (dx,dy,dz) в локальных координатах
procedure MoveByLocal(dx,dy,dz: real);
begin
// x,y,z в локальных координатах всегда нули
MoveToLocal(dx, dy, dz);
end;
/// Перемещает 3D-объект на вектор v в локальных координатах
procedure MoveByLocal(v: Vector3D) := MoveByLocal(v.x,v.y,v.z);
/// Возвращает анимацию перемещения объекта к точке (x, y, z) за seconds секунд в локальных координатах
function AnimMoveToLocal(x, y, z: real; seconds: real := 1): AnimationBase;
begin
var p := Invoke&<Point3D>(()->model.GetTransform.Transform(new Point3D(x,y,z)));
Result := AnimMoveTo(p);
end;
/// Возвращает анимацию перемещения объекта к точке p за seconds секунд в локальных координатах
function AnimMoveToLocal(p: Point3D; seconds: real := 1): AnimationBase
:= AnimMoveToLocal(p.x,p.y,p.z,seconds);
/// Возвращает анимацию перемещения объекта на вектор (dx, dy, dz) за seconds секунд в локальных координатах
function AnimMoveByLocal(dx, dy, dz: real; seconds: real := 1): AnimationBase;
begin
Result := AnimMoveToLocal(dx, dy, dz, seconds);
end;
/// Возвращает анимацию перемещения объекта на вектор v за seconds секунд в локальных координатах
function AnimMoveByLocal(v: Vector3D; seconds: real := 1): AnimationBase
:= AnimMoveByLocal(v.x,v.y,v.z,seconds);
private
procedure MoveToProp(p: Point3D) := MoveTo(p);
@ -3577,6 +3621,7 @@ begin
a := typeof(PyramidTWireframe);
a := typeof(SegmentsT);
a := typeof(TorusT);
a := a;
end;
var res: Object3D;
Invoke(procedure -> begin

View file

@ -26,7 +26,10 @@ namespace VisualPascalABC
try
{
if (th != null)
{
th.Abort();
th.Join(); // Это обязательно. По большому счету вообще Abort надо заменить на современное завершение потоков
}
}
catch
{

View file

@ -26,7 +26,11 @@ namespace VisualPascalABC
try
{
if (th != null)
th.Abort();
{
IsDone = true;
th.Abort(); // надо бы заменить на что то современное
th.Join();
}
}
catch
{
@ -133,11 +137,15 @@ namespace VisualPascalABC
}
}
private volatile bool IsDone = false;
private void InternalParsing()
{
while (true)
while (!IsDone)
{
ParseInThread();
if (IsDone)
break;
System.Threading.Thread.Sleep(2000);
}
}

View file

@ -562,6 +562,50 @@ type
end;
/// Цвет 3D-объекта
property Color: GColor read GetColor write SetColor; virtual;
/// Локальная ось X в глобальных координатах
property LocalAxisX: Vector3D
read Invoke&<Vector3D>(()->model.GetTransform.Transform(new Vector3D(1,0,0)));
/// Локальная ось X в глобальных координатах
property LocalAxisY: Vector3D
read Invoke&<Vector3D>(()->model.GetTransform.Transform(new Vector3D(0,1,0)));
/// Локальная ось X в глобальных координатах
property LocalAxisZ: Vector3D
read Invoke&<Vector3D>(()->model.GetTransform.Transform(new Vector3D(0,0,1)));
/// Перемещает 3D-объект к точке (x,y,z) в локальных координатах
procedure MoveToLocal(x,y,z: real);
begin
var p := Invoke&<Point3D>(()->model.GetTransform.Transform(new Point3D(x,y,z)));
MoveTo(p);
end;
/// Перемещает 3D-объект к точке p в локальных координатах
procedure MoveToLocal(p: Point3D) := MoveToLocal(p.x,p.y,p.z);
/// Перемещает 3D-объект на вектор (dx,dy,dz) в локальных координатах
procedure MoveByLocal(dx,dy,dz: real);
begin
// x,y,z в локальных координатах всегда нули
MoveToLocal(dx, dy, dz);
end;
/// Перемещает 3D-объект на вектор v в локальных координатах
procedure MoveByLocal(v: Vector3D) := MoveByLocal(v.x,v.y,v.z);
/// Возвращает анимацию перемещения объекта к точке (x, y, z) за seconds секунд в локальных координатах
function AnimMoveToLocal(x, y, z: real; seconds: real := 1): AnimationBase;
begin
var p := Invoke&<Point3D>(()->model.GetTransform.Transform(new Point3D(x,y,z)));
Result := AnimMoveTo(p);
end;
/// Возвращает анимацию перемещения объекта к точке p за seconds секунд в локальных координатах
function AnimMoveToLocal(p: Point3D; seconds: real := 1): AnimationBase
:= AnimMoveToLocal(p.x,p.y,p.z,seconds);
/// Возвращает анимацию перемещения объекта на вектор (dx, dy, dz) за seconds секунд в локальных координатах
function AnimMoveByLocal(dx, dy, dz: real; seconds: real := 1): AnimationBase;
begin
Result := AnimMoveToLocal(dx, dy, dz, seconds);
end;
/// Возвращает анимацию перемещения объекта на вектор v за seconds секунд в локальных координатах
function AnimMoveByLocal(v: Vector3D; seconds: real := 1): AnimationBase
:= AnimMoveByLocal(v.x,v.y,v.z,seconds);
private
procedure MoveToProp(p: Point3D) := MoveTo(p);
@ -3577,6 +3621,7 @@ begin
a := typeof(PyramidTWireframe);
a := typeof(SegmentsT);
a := typeof(TorusT);
a := a;
end;
var res: Object3D;
Invoke(procedure -> begin

View file

@ -703,7 +703,7 @@ begin
InputList.Add(Result[i]);
end;
/// Возвращает массив из n целых, введенных с клавиатуры
{/// Возвращает массив из n целых, введенных с клавиатуры
function ReadArrInteger(n: integer): array of integer;
begin
Result := PABCSystem.ReadArrInteger(n); // и всё!!! Данные в InputList уже внесены!
@ -731,12 +731,15 @@ end;
function ReadMatrReal(m, n: integer): array [,] of real;
begin
Result := PABCSystem.ReadMatrReal(m,n);
end;
end;}
/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями
function MatrRandomInteger(m: integer; n: integer; a: integer; b: integer): array [,] of integer;
begin
Result := PABCSystem.MatrRandomInteger(m,n,a,b);
if IsPT then exit;
foreach var x in Result.ElementsByRow do
InputList.Add(x);
end;
/// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями
@ -763,7 +766,7 @@ begin
InputList.Add(x);
end;
function ReadString: string;
{function ReadString: string;
begin
Result := PABCSystem.ReadString;
if IsPT then exit;
@ -775,7 +778,7 @@ function ReadlnString := ReadString;
function ReadString2 := (ReadString, ReadString);
function ReadlnString2 := ReadString2;
function ReadlnString2 := ReadString2;}
function ReadInteger(prompt: string): integer;
begin
@ -859,6 +862,7 @@ type
function ReadLine: string; override;
begin
Result := inherited ReadLine;
InputList.Add(Result);
DoNewLineBeforeMessage := False;
end;

View file

@ -3,6 +3,8 @@ unit Turtle;
uses GraphWPF;
type Colors = GraphWPF.Colors;
var
tp: Point;
a: real := 0;

Binary file not shown.

Binary file not shown.