diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 809db5fd6..419bdb63f 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "8"; public const string Build = "0"; - public const string Revision = "2886"; + public const string Revision = "2891"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 56fd19998..417e8130a 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=0 -%REVISION%=2886 %MINOR%=8 +%REVISION%=2891 +%COREVERSION%=0 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 5e0fec179..f9a6d894f 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.8.0.2886 +3.8.0.2891 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 8556a793d..977c89c5b 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.8.0.2886' +!define VERSION '3.8.0.2891' diff --git a/TestSuite/CompilationSamples/graph3d.pas b/TestSuite/CompilationSamples/graph3d.pas index efabb8351..c9e28cf32 100644 --- a/TestSuite/CompilationSamples/graph3d.pas +++ b/TestSuite/CompilationSamples/graph3d.pas @@ -3211,65 +3211,63 @@ procedure ShowObjects; //>> Graph3D: функции для создания 3D-объектов # Graph3D functions for creation 3D-objects // ----------------------------------------------------- /// Возвращает сферу с центром в точке (x, y, z) радиуса Radius -function Sphere(x, y, z, Radius: real; m: Material): SphereT; -/// Возвращает сферу с центром в точке (x, y, z) радиуса Radius -function Sphere(x, y, z, Radius: real): SphereT; +function Sphere(x, y, z, Radius: real; m: Material := nil): SphereT; /// Возвращает сферу с центром в точке center радиуса Radius function Sphere(center: Point3D; Radius: real; m: Material := nil): SphereT; /// Возвращает эллипсоид с центром в точке (x, y, z) и радиусами RadiusX, RadiusY, RadiusZ -function Ellipsoid(x, y, z, RadiusX, RadiusY, RadiusZ: real; m: Material := DefaultMaterial): EllipsoidT; +function Ellipsoid(x, y, z, RadiusX, RadiusY, RadiusZ: real; m: Material := nil): EllipsoidT; /// Возвращает эллипсоид с центром в точке center и радиусами RadiusX, RadiusY, RadiusZ -function Ellipsoid(center: Point3D; RadiusX, RadiusY, RadiusZ: real; m: Material := DefaultMaterial): EllipsoidT; +function Ellipsoid(center: Point3D; RadiusX, RadiusY, RadiusZ: real; m: Material := nil): EllipsoidT; /// Возвращает куб с центром в точке (x, y, z) и длиной стороны SideLength -function Cube(x, y, z, SideLength: real; m: Material := DefaultMaterial): CubeT; +function Cube(x, y, z, SideLength: real; m: Material := nil): CubeT; /// Возвращает куб с центром в точке center и длиной стороны SideLength -function Cube(center: Point3D; SideLength: real; m: Material := DefaultMaterial): CubeT; +function Cube(center: Point3D; SideLength: real; m: Material := nil): CubeT; /// Возвращает паралеллепипед с центром в точке (x, y, z) и размерами SizeX, SizeY, SizeZ -function Box(x, y, z, SizeX, SizeY, SizeZ: real; m: Material := DefaultMaterial): BoxT; +function Box(x, y, z, SizeX, SizeY, SizeZ: real; m: Material := nil): BoxT; /// Возвращает паралеллепипед с центром в точке center и размерами SizeX, SizeY, SizeZ -function Box(center: Point3D; sz: Size3D; m: Material := DefaultMaterial): BoxT; +function Box(center: Point3D; sz: Size3D; m: Material := nil): BoxT; /// Возвращает 3D-стрелку с центром в точке (x, y, z), направлением (vx, vy, vz), диаметра Diameter и длиной наконечника HeadLength -function Arrow(x, y, z, vx, vy, vz, Diameter, HeadLength: real; m: Material := DefaultMaterial): ArrowT; +function Arrow(x, y, z, vx, vy, vz, Diameter, HeadLength: real; m: Material := nil): ArrowT; /// Возвращает 3D-стрелку с центром в точке (x, y, z), направлением (vx, vy, vz), диаметра Diameter -function Arrow(x, y, z, vx, vy, vz, Diameter: real; m: Material := DefaultMaterial): ArrowT; +function Arrow(x, y, z, vx, vy, vz, Diameter: real; m: Material := nil): ArrowT; /// Возвращает 3D-стрелку с центром в точке (x, y, z), направлением (vx, vy, vz) -function Arrow(x, y, z, vx, vy, vz: real; m: Material := DefaultMaterial): ArrowT; +function Arrow(x, y, z, vx, vy, vz: real; m: Material := nil): ArrowT; /// Возвращает 3D-стрелку с центром в точке p, направлением p, диаметра Diameter и длиной наконечника HeadLength -function Arrow(p: Point3D; v: Vector3D; Diameter, HeadLength: real; m: Material := DefaultMaterial): ArrowT; +function Arrow(p: Point3D; v: Vector3D; Diameter, HeadLength: real; m: Material := nil): ArrowT; /// Возвращает 3D-стрелку с центром в точке p, направлением p, диаметра Diameter -function Arrow(p: Point3D; v: Vector3D; Diameter: real; m: Material := DefaultMaterial): ArrowT; +function Arrow(p: Point3D; v: Vector3D; Diameter: real; m: Material := nil): ArrowT; /// Возвращает 3D-стрелку с центром в точке p, направлением p -function Arrow(p: Point3D; v: Vector3D; m: Material := DefaultMaterial): ArrowT; +function Arrow(p: Point3D; v: Vector3D; m: Material := nil): ArrowT; ///-- -function TruncatedCone(x, y, z, Height, Radius, TopRadius: real; topcap: boolean; m: Material := DefaultMaterial): TruncatedConeT; +function TruncatedCone(x, y, z, Height, Radius, TopRadius: real; topcap: boolean; m: Material := nil): TruncatedConeT; /// Возвращает усеченный конус с центром основания в точке (x, y, z) высоты Height, радиуса основания Radius, верхнего радиуса TopRadius -function TruncatedCone(x, y, z, Height, Radius, TopRadius: real; m: Material := DefaultMaterial): TruncatedConeT; +function TruncatedCone(x, y, z, Height, Radius, TopRadius: real; m: Material := nil): TruncatedConeT; ///-- -function TruncatedCone(p: Point3D; Height, Radius, TopRadius: real; topcap: boolean; m: Material := DefaultMaterial): TruncatedConeT; +function TruncatedCone(p: Point3D; Height, Radius, TopRadius: real; topcap: boolean; m: Material := nil): TruncatedConeT; /// Возвращает усеченный конус с центром основания в точке p высоты Height, радиуса основания Radius, верхнего радиуса TopRadius -function TruncatedCone(p: Point3D; Height, Radius, TopRadius: real; m: Material := DefaultMaterial): TruncatedConeT; +function TruncatedCone(p: Point3D; Height, Radius, TopRadius: real; m: Material := nil): TruncatedConeT; ///-- -function Cylinder(x, y, z, Height, Radius: real; topcap: boolean; m: Material := DefaultMaterial): CylinderT; +function Cylinder(x, y, z, Height, Radius: real; topcap: boolean; m: Material := nil): CylinderT; /// Возвращает цилиндр с центром основания в точке (x, y, z) высоты Height радиуса Radius -function Cylinder(x, y, z, Height, Radius: real; m: Material := DefaultMaterial): CylinderT; +function Cylinder(x, y, z, Height, Radius: real; m: Material := nil): CylinderT; ///-- -function Cylinder(p: Point3D; Height, Radius: real; topcap: boolean; m: Material := DefaultMaterial): CylinderT; +function Cylinder(p: Point3D; Height, Radius: real; topcap: boolean; m: Material := nil): CylinderT; /// Возвращает цилиндр с центром основания в точке p высоты Height радиуса Radius -function Cylinder(p: Point3D; Height, Radius: real; m: Material := DefaultMaterial): CylinderT; +function Cylinder(p: Point3D; Height, Radius: real; m: Material := nil): CylinderT; /// Возвращает трубу с центром основания в точке (x, y, z) высотой Height, радиусом Radius и внутренним радиусом InnerRadius -function Tube(x, y, z, Height, Radius, InnerRadius: real; m: Material := DefaultMaterial): PipeT; +function Tube(x, y, z, Height, Radius, InnerRadius: real; m: Material := nil): PipeT; /// Возвращает трубу с центром основания в точке p высотой Height, радиусом Radius и внутренним радиусом InnerRadius -function Tube(p: Point3D; Height, Radius, InnerRadius: real; m: Material := DefaultMaterial): PipeT; +function Tube(p: Point3D; Height, Radius, InnerRadius: real; m: Material := nil): PipeT; /// Возвращает конус с центром основания в точке (x, y, z) высотой Height, радиусом Radius -function Cone(x, y, z, Height, Radius: real; m: Material := DefaultMaterial): TruncatedConeT; +function Cone(x, y, z, Height, Radius: real; m: Material := nil): TruncatedConeT; /// Возвращает конус с центром основания в точке p высотой Height, радиусом Radius -function Cone(p: Point3D; Height, Radius: real; m: Material := DefaultMaterial): TruncatedConeT; +function Cone(p: Point3D; Height, Radius: real; m: Material := nil): TruncatedConeT; /// Возвращает чайник с центром в точке (x, y, z) -function Teapot(x, y, z: real; c: Material := DefaultMaterial): TeapotT; +function Teapot(x, y, z: real; c: Material := nil): TeapotT; /// Возвращает чайник с центром в точке p -function Teapot(p: Point3D; c: Material := DefaultMaterial): TeapotT; +function Teapot(p: Point3D; c: Material := nil): TeapotT; /// Возвращает текст на билборде с центром в точке (x, y, z) с размером шрифта Fontsize function BillboardText(x, y, z: real; Text: string; Fontsize: real := 12): BillboardTextT; /// Возвращает текст на билборде с центром в точке p с размером шрифта Fontsize @@ -3279,25 +3277,29 @@ function CoordinateSystem(ArrowsLength, Diameter: real): CoordinateSystemT; /// Возвращает координатную систему с длиной стрелок ArrowsLength function CoordinateSystem(ArrowsLength: real): CoordinateSystemT; /// Возвращает 3D-текст с центром в точке (x, y, z) с высотой Height, именем шрифта FontName заданного цвета -function Text3D(x, y, z: real; Text: string; Height: real; FontName: string := 'Arial'; c: Color := Colors.Black): TextT; +function Text3D(x, y, z: real; Text: string; Height: real; FontName: string; c: Color): TextT; +/// Возвращает 3D-текст с центром в точке (x, y, z) с высотой Height, именем шрифта FontName +function Text3D(x, y, z: real; Text: string; Height: real; FontName: string := 'Arial'): TextT; /// Возвращает 3D-текст с центром в точке p с высотой Height, именем шрифта FontName заданного цвета -function Text3D(p: Point3D; Text: string; Height: real; FontName: string := 'Arial'; c: Color := Colors.Black): TextT; +function Text3D(p: Point3D; Text: string; Height: real; FontName: string; c: Color): TextT; +/// Возвращает 3D-текст с центром в точке p с высотой Height, именем шрифта FontName +function Text3D(p: Point3D; Text: string; Height: real; FontName: string := 'Arial'): TextT; /// Возвращает 3D-текст с центром в точке (x, y, z) с высотой Height заданного цвета function Text3D(x, y, z: real; Text: string; Height: real; c: Color): TextT; /// Возвращает 3D-текст с центром в точке p с высотой Height заданного цвета function Text3D(p: Point3D; Text: string; Height: real; c: Color): TextT; /// Возвращает 3D-прямоугольник с центром в точке (x, y, z) длины Length, ширины Width, нормалью Normal и направлением длины LengthDirection -function Rectangle3D(x, y, z, Length, Width: real; Normal, LengthDirection: Vector3D; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(x, y, z, Length, Width: real; Normal, LengthDirection: Vector3D; m: Material := nil): RectangleT; /// Возвращает 3D-прямоугольник с центром в точке p длины Length, ширины Width, нормалью Normal и направлением длины LengthDirection -function Rectangle3D(p: Point3D; Length, Width: real; Normal, LengthDirection: Vector3D; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(p: Point3D; Length, Width: real; Normal, LengthDirection: Vector3D; m: Material := nil): RectangleT; /// Возвращает 3D-прямоугольник с центром в точке (x, y, z) длины Length, ширины Width, нормалью Normal -function Rectangle3D(x, y, z, Length, Width: real; Normal: Vector3D; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(x, y, z, Length, Width: real; Normal: Vector3D; m: Material := nil): RectangleT; /// Возвращает 3D-прямоугольник с центром в точке (x, y, z) длины Length, ширины Width -function Rectangle3D(x, y, z, Length, Width: real; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(x, y, z, Length, Width: real; m: Material := nil): RectangleT; /// Возвращает 3D-прямоугольник с центром в точке p длины Length, ширины Width, нормалью Normal -function Rectangle3D(p: Point3D; Length, Width: real; Normal: Vector3D; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(p: Point3D; Length, Width: real; Normal: Vector3D; m: Material := nil): RectangleT; /// Возвращает 3D-прямоугольник с центром в точке p длины Length, ширины Width -function Rectangle3D(p: Point3D; Length, Width: real; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(p: Point3D; Length, Width: real; m: Material := nil): RectangleT; /// Загружает модель из файла в форматах .obj, .3ds, .lwo, .objz, .stl, .off и отображает ее в точке (x, y, z) function FileModel3D(x, y, z: real; fname: string; m: Material): FileModelT; @@ -3305,53 +3307,69 @@ function FileModel3D(x, y, z: real; fname: string; m: Material): FileModelT; function FileModel3D(p: Point3D; fname: string; m: Material): FileModelT; /// Возвращает правильную призму с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height и радиусом Radius -function Prism(x, y, z: real; Sides: integer; Height, Radius: real; m: Material := DefaultMaterial): PrismT; +function Prism(x, y, z: real; Sides: integer; Height, Radius: real; m: Material := nil): PrismT; /// Возвращает правильную призму с центром основания в точке p, количеством сторон Sides, высотой Height и радиусом Radius -function Prism(p: Point3D; Sides: integer; Height, Radius: real; m: Material := DefaultMaterial): PrismT; +function Prism(p: Point3D; Sides: integer; Height, Radius: real; m: Material := nil): PrismT; /// Возвращает проволочную правильную призму с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height, радиусом Radius и толщиной проволоки Thickness -function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real := 1.2; c: Color := GrayColor(64)): PrismTWireFrame; +function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame; +/// Возвращает проволочную правильную призму с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height, радиусом Radius и толщиной проволоки Thickness +function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real := 1.2): PrismTWireFrame; /// Возвращает проволочную правильную призму с центром основания в точке p, количеством сторон Sides, высотой Height, радиусом Radius и толщиной проволоки Thickness -function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real := 1.2; c: Color := GrayColor(64)): PrismTWireFrame; +function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame; +/// Возвращает проволочную правильную призму с центром основания в точке p, количеством сторон Sides, высотой Height, радиусом Radius и толщиной проволоки Thickness +function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real := 1.2): PrismTWireFrame; /// Возвращает правильную пирамиду с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height и радиусом Radius -function Pyramid(x, y, z: real; Sides: integer; Height, Radius: real; m: Material := DefaultMaterial): PyramidT; +function Pyramid(x, y, z: real; Sides: integer; Height, Radius: real; m: Material := nil): PyramidT; /// Возвращает правильную пирамиду с центром основания в точке p, количеством сторон Sides, высотой Height и радиусом Radius -function Pyramid(p: Point3D; Sides: integer; Height, Radius: real; m: Material := DefaultMaterial): PyramidT; +function Pyramid(p: Point3D; Sides: integer; Height, Radius: real; m: Material := nil): PyramidT; /// Возвращает проволочную правильную пирамиду с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height и радиусом Radius -function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real := 1.2; c: Color := GrayColor(64)): PyramidTWireFrame; +function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PyramidTWireFrame; +/// Возвращает проволочную правильную пирамиду с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height и радиусом Radius +function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real := 1.2): PyramidTWireFrame; /// Возвращает проволочную правильную пирамиду с центром основания в точке p, количеством сторон Sides, высотой Height и радиусом Radius -function PyramidWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real := 1.2; c: Color := GrayColor(64)): PyramidTWireFrame; +function PyramidWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PyramidTWireFrame; +/// Возвращает проволочную правильную пирамиду с центром основания в точке p, количеством сторон Sides, высотой Height и радиусом Radius +function PyramidWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real := 1.2): PyramidTWireFrame; /// Возвращает лего-деталь с центром в точке (x, y, z), размера (Rows, Columns, Height), измеряемом в количестве кирпичиков по каждой размерности -function Lego(x, y, z: real; Rows, Columns, Height: integer; m: Material := DefaultMaterial): LegoT; +function Lego(x, y, z: real; Rows, Columns, Height: integer; m: Material := nil): LegoT; /// Возвращает икосаэдр с центром в точке (x, y, z) и радиусом описанной окружности Radius -function Icosahedron(x, y, z, Radius: real; m: Material := DefaultMaterial): IcosahedronT; +function Icosahedron(x, y, z, Radius: real; m: Material := nil): IcosahedronT; /// Возвращает додекаэдр с центром в точке (x, y, z) и радиусом описанной окружности Radius -function Dodecahedron(x, y, z, Radius: real; m: Material := DefaultMaterial): DodecahedronT; +function Dodecahedron(x, y, z, Radius: real; m: Material := nil): DodecahedronT; /// Возвращает тетраэдр с центром в точке (x, y, z) и радиусом описанной окружности Radius -function Tetrahedron(x, y, z, Radius: real; m: Material := DefaultMaterial): TetrahedronT; +function Tetrahedron(x, y, z, Radius: real; m: Material := nil): TetrahedronT; /// Возвращает октаэдр с центром в точке (x, y, z) и радиусом описанной окружности Radius -function Octahedron(x, y, z, Radius: real; m: Material := DefaultMaterial): OctahedronT; +function Octahedron(x, y, z, Radius: real; m: Material := nil): OctahedronT; /// Возвращает икосаэдр с центром в точке p и радиусом описанной окружности Radius -function Icosahedron(p: Point3D; Radius: real; m: Material := DefaultMaterial): IcosahedronT; +function Icosahedron(p: Point3D; Radius: real; m: Material := nil): IcosahedronT; /// Возвращает додекаэдр с центром в точке p и радиусом описанной окружности Radius -function Dodecahedron(p: Point3D; Radius: real; m: Material := DefaultMaterial): DodecahedronT; +function Dodecahedron(p: Point3D; Radius: real; m: Material := nil): DodecahedronT; /// Возвращает тетраэдр с центром в точке p и радиусом описанной окружности Radius -function Tetrahedron(p: Point3D; Radius: real; m: Material := DefaultMaterial): TetrahedronT; +function Tetrahedron(p: Point3D; Radius: real; m: Material := nil): TetrahedronT; /// Возвращает октаэдр с центром в точке p и радиусом описанной окружности Radius -function Octahedron(p: Point3D; Radius: real; m: Material := DefaultMaterial): OctahedronT; +function Octahedron(p: Point3D; Radius: real; m: Material := nil): OctahedronT; /// Возвращает набор отрезков, задаваемых последовательностью точек points, толщиной Thickness, заданного цвета. Количество точек должно быть четным -function Segments3D(points: sequence of Point3D; Thickness: real := 1.2; c: Color := GrayColor(64)): SegmentsT; +function Segments3D(points: sequence of Point3D; Thickness: real; c: Color): SegmentsT; +/// Возвращает набор отрезков, задаваемых последовательностью точек points, толщиной Thickness. Количество точек должно быть четным +function Segments3D(points: sequence of Point3D; Thickness: real := 1.2): SegmentsT; /// Возвращает ломаную, задаваемую последовательностью точек points, толщиной Thickness, заданного цвета -function Polyline3D(points: sequence of Point3D; Thickness: real := 1.2; c: Color := GrayColor(64)): SegmentsT; +function Polyline3D(points: sequence of Point3D; Thickness: real; c: Color): SegmentsT; +/// Возвращает ломаную, задаваемую последовательностью точек points, толщиной Thickness +function Polyline3D(points: sequence of Point3D; Thickness: real := 1.2): SegmentsT; /// Возвращает замкнутую ломаную, задаваемую последовательностью точек points, толщиной Thickness, заданного цвета -function Polygon3D(points: sequence of Point3D; Thickness: real := 1.2; c: Color := GrayColor(64)): SegmentsT; +function Polygon3D(points: sequence of Point3D; Thickness: real; c: Color): SegmentsT; +/// Возвращает замкнутую ломаную, задаваемую последовательностью точек points, толщиной Thickness +function Polygon3D(points: sequence of Point3D; Thickness: real := 1.2): SegmentsT; /// Возвращает отрезок из точки p1 в точку p2 толщиной Thickness заданного цвета -function Segment3D(p1, p2: Point3D; Thickness: real := 1.2; c: Color := GrayColor(64)): SegmentsT; +function Segment3D(p1, p2: Point3D; Thickness: real; c: Color): SegmentsT; +/// Возвращает отрезок из точки p1 в точку p2 толщиной Thickness заданного цвета +function Segment3D(p1, p2: Point3D; Thickness: real := 1.2): SegmentsT; /// Возвращает тор (бублик) с центром в точке (x, y, z), диаметром Diameter и диаметром трубы TubeDiameter -function Torus(x, y, z, Diameter, TubeDiameter: real; m: Material := DefaultMaterial): TorusT; +function Torus(x, y, z, Diameter, TubeDiameter: real; m: Material := nil): TorusT; /// Возвращает тор (бублик) с центром в точке p, диаметром Diameter и диаметром трубы TubeDiameter -function Torus(p: Point3D; Diameter, TubeDiameter: real; m: Material := DefaultMaterial): TorusT; +function Torus(p: Point3D; Diameter, TubeDiameter: real; m: Material := nil): TorusT; /// Возвращает треугольник, соединяющий точки p1, p2, p3 -function Triangle(p1, p2, p3: Point3D; m: Material := DefaultMaterial): TriangleT; +function Triangle(p1, p2, p3: Point3D; m: Material := nil): TriangleT; // Конец примитивов //------------------------------------------------------------------------------------ @@ -4116,8 +4134,6 @@ function Group(en: sequence of Object3D): Group3D := Inv(()->Group3D.Create(0, 0 function Sphere(x, y, z, Radius: real; m: Material): SphereT := Inv(()->SphereT.Create(x, y, z, Radius, m)); -function Sphere(x, y, z, Radius: real): SphereT := Sphere(x, y, z, Radius, DefaultMaterial); - function Sphere(center: Point3D; Radius: real; m: Material) := Sphere(center.x, center.y, center.z, Radius, m); function Ellipsoid(x, y, z, RadiusX, RadiusY, RadiusZ: real; m: Material): EllipsoidT := Inv(()->EllipsoidT.Create(x, y, z, RadiusX, RadiusY, RadiusZ, m)); @@ -4192,8 +4208,14 @@ function CoordinateSystem(ArrowsLength: real) := CoordinateSystem(arrowslength, function Text3D(x, y, z: real; Text: string; Height: real; fontname: string; c: Color): TextT := Inv(()->TextT.Create(x, y, z, text, height, fontname, c)); +function Text3D(x, y, z: real; Text: string; Height: real; FontName: string): TextT + := Text3D(x, y, z, Text, Height, FontName, Colors.Black); + function Text3D(p: Point3D; Text: string; Height: real; fontname: string; c: Color) := Text3D(P.x, p.y, p.z, text, height, fontname, c); +function Text3D(p: Point3D; Text: string; Height: real; FontName: string): TextT + := Text3D(p, Text, Height, FontName, Colors.Black); + function Text3D(x, y, z: real; Text: string; Height: real; c: Color) := Text3D(x, y, z, text, height, 'Arial', c); function Text3D(p: Point3D; Text: string; Height: real; c: Color) := Text3D(p.x, p.y, p.z, text, height, 'Arial', c); @@ -4221,16 +4243,28 @@ function Prism(p: Point3D; Sides: integer; Height, Radius: real; m: Material): P function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame := Inv(()->PrismTWireFrame.Create(x, y, z, Sides, Radius, Height, thickness, c)); +function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real): PrismTWireFrame + := PrismWireFrame(x, y, z, Sides, Height, Radius, Thickness, GrayColor(64)); + function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame := PrismWireFrame(p.x, p.y, p.z, Sides, Height, Radius, thickness, c); +function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real): PrismTWireFrame + := PrismWireFrame(p, Sides, Height, Radius, Thickness, GrayColor(64)); + function Pyramid(x, y, z: real; Sides: integer; Height, Radius: real; m: Material): PyramidT := Inv(()->PyramidT.Create(x, y, z, Sides, Radius, Height, m)); function Pyramid(p: Point3D; Sides: integer; Height, Radius: real; m: Material): PyramidT := Pyramid(p.X, p.Y, p.Z, Sides, Height, Radius, m); function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PyramidTWireFrame := Inv(()->PyramidTWireFrame.Create(x, y, z, Sides, Radius, Height, thickness, c)); +function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real): PyramidTWireFrame + := PyramidWireFrame(x, y, z, Sides, Height, Radius, Thickness, GrayColor(64)); + function PyramidWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PyramidTWireFrame := PyramidWireFrame(p.x, p.y, p.z, Sides, Height, Radius, thickness, c); +function PyramidWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real): PyramidTWireFrame + := PyramidWireFrame(p, Sides, Height, Radius, Thickness, GrayColor(64)); + function Lego(x, y, z: real; Rows, Columns, Height: integer; m: Material): LegoT := Inv(()->LegoT.Create(x, y, z, Rows, Columns, Height, m)); function Icosahedron(x, y, z, Radius: real; m: Material): IcosahedronT := Inv(()->IcosahedronT.Create(x, y, z, 4 * Radius / Sqrt(2) / Sqrt(5 + Sqrt(5)), m)); @@ -4251,6 +4285,18 @@ function Octahedron(p: Point3D; Radius: real; m: Material): OctahedronT := Octah function Segments3D(points: sequence of Point3D; thickness: real; c: Color): SegmentsT := Inv(()->SegmentsT.Create(points, thickness, c)); +function Segments3D(points: sequence of Point3D; Thickness: real): SegmentsT + := Segments3D(points, Thickness, GrayColor(64)); + +function Polyline3D(points: sequence of Point3D; Thickness: real): SegmentsT + := Polyline3D(points, Thickness, GrayColor(64)); + +function Polygon3D(points: sequence of Point3D; Thickness: real): SegmentsT + := Polygon3D(points, Thickness, GrayColor(64)); + +function Segment3D(p1, p2: Point3D; Thickness: real): SegmentsT + := Segment3D(p1, p2, Thickness, GrayColor(64)); + function Polyline3D(points: sequence of Point3D; thickness: real; c: Color): SegmentsT := Inv(()->SegmentsT.Create(points.Pairwise.SelectMany(x -> Seq(x[0], x[1])), thickness, c)); function Polygon3D(points: sequence of Point3D; thickness: real; c: Color): SegmentsT := Inv(()->SegmentsT.Create((points + points.First).Pairwise.SelectMany(x -> Seq(x[0], x[1])), thickness, c)); diff --git a/TestSuite/overl_lam_exit.pas b/TestSuite/overl_lam_exit.pas index ed3fafb92..bbf1b4c9b 100644 --- a/TestSuite/overl_lam_exit.pas +++ b/TestSuite/overl_lam_exit.pas @@ -10,5 +10,5 @@ begin end; begin - p1(()-> exit()); + p1(procedure-> exit()); end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 347e119f9..91078ac15 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -16978,8 +16978,8 @@ namespace PascalABCCompiler.TreeConverter if (!(sil.FirstOrDefault().sym_info is common_in_function_function_node)) { var ex = sil.FirstOrDefault().sym_info as basic_function_node; - if (ex != null && ex.name.ToLower() == "exit") - return new basic_function_call(ex, ex.location); + //if (ex != null && ex.name.ToLower() == "exit") + // return new basic_function_call(ex, ex.location); return make_delegate_wrapper(null, sil, lloc, ((sil.FirstOrDefault().sym_info is common_method_node) && ((common_method_node)sil.FirstOrDefault().sym_info).IsStatic)); } return convertion_data_and_alghoritms.create_full_function_call(new expressions_list(), diff --git a/bin/Lib/Controls.pas b/bin/Lib/Controls.pas index 46936b968..d0358ebc1 100644 --- a/bin/Lib/Controls.pas +++ b/bin/Lib/Controls.pas @@ -107,10 +107,12 @@ type SetFSzPP(Self.p,value); end; public - constructor Create(wh: real := 150; d: Dock := Dock.Left; c: Color := PanelsColor; internalMargin: real := 10); + constructor Create(wh: real; d: Dock; c: Color; internalMargin: real); begin Invoke(CreateP,wh,d,c,internalMargin); end; + constructor Create(wh: real; d: Dock; c: Color) := Create(wh,d,c,10); + constructor Create(wh: real := 150; d: Dock := Dock.Left) := Create(wh,d,PanelsColor,10); /// Цвет property Color: GColor read Invoke&(GetColorP) write Invoke(SetColorP, value); /// Ширина внутренней границы @@ -128,19 +130,23 @@ type /// Класс левой панели LeftPanelWPF = class(PanelWPF) public - constructor Create(width: real := 150; c: GColor := PanelsColor; internalMargin: real := 10); + constructor Create(width: real; c: GColor; internalMargin: real); begin inherited Create(width, Dock.Left,c,internalMargin) end; + constructor Create(width: real; c: GColor) := Create(width,c,10); + constructor Create(width: real := 150) := Create(width,PanelsColor,10); end; /// Класс правой панели RightPanelWPF = class(PanelWPF) public - constructor Create(width: real := 150; c: GColor := PanelsColor; internalMargin: real := 10); + constructor Create(width: real; c: GColor; internalMargin: real); begin inherited Create(width, Dock.Right,c,internalMargin) end; + constructor Create(width: real; c: GColor) := Create(width,c,10); + constructor Create(width: real := 150) := Create(width,PanelsColor,10); end; ///!# @@ -1221,9 +1227,13 @@ function OpenFileDialog(initDirectory: string := ''; filter: string := ''): Open function SaveFileDialog(initDirectory: string := ''; filter: string := ''): SaveFileDialogWPF; /// Элемент управления "Левая панель" -function LeftPanel(width: real := 150; c: Color := PanelsColor; InternalMargin: real := 10): PanelWPF; +function LeftPanel(width: real; c: Color; InternalMargin: real := 10): PanelWPF; +/// Элемент управления "Левая панель" +function LeftPanel(width: real := 150): PanelWPF; /// Элемент управления "Правая панель" -function RightPanel(width: real := 150; c: Color := PanelsColor; InternalMargin: real := 10): PanelWPF; +function RightPanel(width: real; c: Color; InternalMargin: real := 10): PanelWPF; +/// Элемент управления "Правая панель" +function RightPanel(width: real := 150): PanelWPF; /// Элемент управления "Строка статуса" function StatusBar(height: real := 24; itemWidth: real := 0): StatusBarWPF; @@ -1323,7 +1333,11 @@ function OpenFileDialog(initDirectory: string; filter: string) := new OpenFileDi function SaveFileDialog(initDirectory: string; filter: string) := new SaveFileDialogWPF(initDirectory,filter); function LeftPanel(width: real; c: Color; internalMargin: real) := new LeftPanelWPF(width,c,internalMargin); +function LeftPanel(width: real): PanelWPF := new LeftPanelWPF(width,PanelsColor,10); + function RightPanel(width: real; c: Color; internalMargin: real) := new RightPanelWPF(width,c,internalMargin); +function RightPanel(width: real): PanelWPF := new RightPanelWPF(width,PanelsColor,10); + function StatusBar(height: real; itemWidth: real): StatusBarWPF := new StatusBarWPF(height,itemWidth); diff --git a/bin/Lib/Graph3D.pas b/bin/Lib/Graph3D.pas index efabb8351..c9e28cf32 100644 --- a/bin/Lib/Graph3D.pas +++ b/bin/Lib/Graph3D.pas @@ -3211,65 +3211,63 @@ procedure ShowObjects; //>> Graph3D: функции для создания 3D-объектов # Graph3D functions for creation 3D-objects // ----------------------------------------------------- /// Возвращает сферу с центром в точке (x, y, z) радиуса Radius -function Sphere(x, y, z, Radius: real; m: Material): SphereT; -/// Возвращает сферу с центром в точке (x, y, z) радиуса Radius -function Sphere(x, y, z, Radius: real): SphereT; +function Sphere(x, y, z, Radius: real; m: Material := nil): SphereT; /// Возвращает сферу с центром в точке center радиуса Radius function Sphere(center: Point3D; Radius: real; m: Material := nil): SphereT; /// Возвращает эллипсоид с центром в точке (x, y, z) и радиусами RadiusX, RadiusY, RadiusZ -function Ellipsoid(x, y, z, RadiusX, RadiusY, RadiusZ: real; m: Material := DefaultMaterial): EllipsoidT; +function Ellipsoid(x, y, z, RadiusX, RadiusY, RadiusZ: real; m: Material := nil): EllipsoidT; /// Возвращает эллипсоид с центром в точке center и радиусами RadiusX, RadiusY, RadiusZ -function Ellipsoid(center: Point3D; RadiusX, RadiusY, RadiusZ: real; m: Material := DefaultMaterial): EllipsoidT; +function Ellipsoid(center: Point3D; RadiusX, RadiusY, RadiusZ: real; m: Material := nil): EllipsoidT; /// Возвращает куб с центром в точке (x, y, z) и длиной стороны SideLength -function Cube(x, y, z, SideLength: real; m: Material := DefaultMaterial): CubeT; +function Cube(x, y, z, SideLength: real; m: Material := nil): CubeT; /// Возвращает куб с центром в точке center и длиной стороны SideLength -function Cube(center: Point3D; SideLength: real; m: Material := DefaultMaterial): CubeT; +function Cube(center: Point3D; SideLength: real; m: Material := nil): CubeT; /// Возвращает паралеллепипед с центром в точке (x, y, z) и размерами SizeX, SizeY, SizeZ -function Box(x, y, z, SizeX, SizeY, SizeZ: real; m: Material := DefaultMaterial): BoxT; +function Box(x, y, z, SizeX, SizeY, SizeZ: real; m: Material := nil): BoxT; /// Возвращает паралеллепипед с центром в точке center и размерами SizeX, SizeY, SizeZ -function Box(center: Point3D; sz: Size3D; m: Material := DefaultMaterial): BoxT; +function Box(center: Point3D; sz: Size3D; m: Material := nil): BoxT; /// Возвращает 3D-стрелку с центром в точке (x, y, z), направлением (vx, vy, vz), диаметра Diameter и длиной наконечника HeadLength -function Arrow(x, y, z, vx, vy, vz, Diameter, HeadLength: real; m: Material := DefaultMaterial): ArrowT; +function Arrow(x, y, z, vx, vy, vz, Diameter, HeadLength: real; m: Material := nil): ArrowT; /// Возвращает 3D-стрелку с центром в точке (x, y, z), направлением (vx, vy, vz), диаметра Diameter -function Arrow(x, y, z, vx, vy, vz, Diameter: real; m: Material := DefaultMaterial): ArrowT; +function Arrow(x, y, z, vx, vy, vz, Diameter: real; m: Material := nil): ArrowT; /// Возвращает 3D-стрелку с центром в точке (x, y, z), направлением (vx, vy, vz) -function Arrow(x, y, z, vx, vy, vz: real; m: Material := DefaultMaterial): ArrowT; +function Arrow(x, y, z, vx, vy, vz: real; m: Material := nil): ArrowT; /// Возвращает 3D-стрелку с центром в точке p, направлением p, диаметра Diameter и длиной наконечника HeadLength -function Arrow(p: Point3D; v: Vector3D; Diameter, HeadLength: real; m: Material := DefaultMaterial): ArrowT; +function Arrow(p: Point3D; v: Vector3D; Diameter, HeadLength: real; m: Material := nil): ArrowT; /// Возвращает 3D-стрелку с центром в точке p, направлением p, диаметра Diameter -function Arrow(p: Point3D; v: Vector3D; Diameter: real; m: Material := DefaultMaterial): ArrowT; +function Arrow(p: Point3D; v: Vector3D; Diameter: real; m: Material := nil): ArrowT; /// Возвращает 3D-стрелку с центром в точке p, направлением p -function Arrow(p: Point3D; v: Vector3D; m: Material := DefaultMaterial): ArrowT; +function Arrow(p: Point3D; v: Vector3D; m: Material := nil): ArrowT; ///-- -function TruncatedCone(x, y, z, Height, Radius, TopRadius: real; topcap: boolean; m: Material := DefaultMaterial): TruncatedConeT; +function TruncatedCone(x, y, z, Height, Radius, TopRadius: real; topcap: boolean; m: Material := nil): TruncatedConeT; /// Возвращает усеченный конус с центром основания в точке (x, y, z) высоты Height, радиуса основания Radius, верхнего радиуса TopRadius -function TruncatedCone(x, y, z, Height, Radius, TopRadius: real; m: Material := DefaultMaterial): TruncatedConeT; +function TruncatedCone(x, y, z, Height, Radius, TopRadius: real; m: Material := nil): TruncatedConeT; ///-- -function TruncatedCone(p: Point3D; Height, Radius, TopRadius: real; topcap: boolean; m: Material := DefaultMaterial): TruncatedConeT; +function TruncatedCone(p: Point3D; Height, Radius, TopRadius: real; topcap: boolean; m: Material := nil): TruncatedConeT; /// Возвращает усеченный конус с центром основания в точке p высоты Height, радиуса основания Radius, верхнего радиуса TopRadius -function TruncatedCone(p: Point3D; Height, Radius, TopRadius: real; m: Material := DefaultMaterial): TruncatedConeT; +function TruncatedCone(p: Point3D; Height, Radius, TopRadius: real; m: Material := nil): TruncatedConeT; ///-- -function Cylinder(x, y, z, Height, Radius: real; topcap: boolean; m: Material := DefaultMaterial): CylinderT; +function Cylinder(x, y, z, Height, Radius: real; topcap: boolean; m: Material := nil): CylinderT; /// Возвращает цилиндр с центром основания в точке (x, y, z) высоты Height радиуса Radius -function Cylinder(x, y, z, Height, Radius: real; m: Material := DefaultMaterial): CylinderT; +function Cylinder(x, y, z, Height, Radius: real; m: Material := nil): CylinderT; ///-- -function Cylinder(p: Point3D; Height, Radius: real; topcap: boolean; m: Material := DefaultMaterial): CylinderT; +function Cylinder(p: Point3D; Height, Radius: real; topcap: boolean; m: Material := nil): CylinderT; /// Возвращает цилиндр с центром основания в точке p высоты Height радиуса Radius -function Cylinder(p: Point3D; Height, Radius: real; m: Material := DefaultMaterial): CylinderT; +function Cylinder(p: Point3D; Height, Radius: real; m: Material := nil): CylinderT; /// Возвращает трубу с центром основания в точке (x, y, z) высотой Height, радиусом Radius и внутренним радиусом InnerRadius -function Tube(x, y, z, Height, Radius, InnerRadius: real; m: Material := DefaultMaterial): PipeT; +function Tube(x, y, z, Height, Radius, InnerRadius: real; m: Material := nil): PipeT; /// Возвращает трубу с центром основания в точке p высотой Height, радиусом Radius и внутренним радиусом InnerRadius -function Tube(p: Point3D; Height, Radius, InnerRadius: real; m: Material := DefaultMaterial): PipeT; +function Tube(p: Point3D; Height, Radius, InnerRadius: real; m: Material := nil): PipeT; /// Возвращает конус с центром основания в точке (x, y, z) высотой Height, радиусом Radius -function Cone(x, y, z, Height, Radius: real; m: Material := DefaultMaterial): TruncatedConeT; +function Cone(x, y, z, Height, Radius: real; m: Material := nil): TruncatedConeT; /// Возвращает конус с центром основания в точке p высотой Height, радиусом Radius -function Cone(p: Point3D; Height, Radius: real; m: Material := DefaultMaterial): TruncatedConeT; +function Cone(p: Point3D; Height, Radius: real; m: Material := nil): TruncatedConeT; /// Возвращает чайник с центром в точке (x, y, z) -function Teapot(x, y, z: real; c: Material := DefaultMaterial): TeapotT; +function Teapot(x, y, z: real; c: Material := nil): TeapotT; /// Возвращает чайник с центром в точке p -function Teapot(p: Point3D; c: Material := DefaultMaterial): TeapotT; +function Teapot(p: Point3D; c: Material := nil): TeapotT; /// Возвращает текст на билборде с центром в точке (x, y, z) с размером шрифта Fontsize function BillboardText(x, y, z: real; Text: string; Fontsize: real := 12): BillboardTextT; /// Возвращает текст на билборде с центром в точке p с размером шрифта Fontsize @@ -3279,25 +3277,29 @@ function CoordinateSystem(ArrowsLength, Diameter: real): CoordinateSystemT; /// Возвращает координатную систему с длиной стрелок ArrowsLength function CoordinateSystem(ArrowsLength: real): CoordinateSystemT; /// Возвращает 3D-текст с центром в точке (x, y, z) с высотой Height, именем шрифта FontName заданного цвета -function Text3D(x, y, z: real; Text: string; Height: real; FontName: string := 'Arial'; c: Color := Colors.Black): TextT; +function Text3D(x, y, z: real; Text: string; Height: real; FontName: string; c: Color): TextT; +/// Возвращает 3D-текст с центром в точке (x, y, z) с высотой Height, именем шрифта FontName +function Text3D(x, y, z: real; Text: string; Height: real; FontName: string := 'Arial'): TextT; /// Возвращает 3D-текст с центром в точке p с высотой Height, именем шрифта FontName заданного цвета -function Text3D(p: Point3D; Text: string; Height: real; FontName: string := 'Arial'; c: Color := Colors.Black): TextT; +function Text3D(p: Point3D; Text: string; Height: real; FontName: string; c: Color): TextT; +/// Возвращает 3D-текст с центром в точке p с высотой Height, именем шрифта FontName +function Text3D(p: Point3D; Text: string; Height: real; FontName: string := 'Arial'): TextT; /// Возвращает 3D-текст с центром в точке (x, y, z) с высотой Height заданного цвета function Text3D(x, y, z: real; Text: string; Height: real; c: Color): TextT; /// Возвращает 3D-текст с центром в точке p с высотой Height заданного цвета function Text3D(p: Point3D; Text: string; Height: real; c: Color): TextT; /// Возвращает 3D-прямоугольник с центром в точке (x, y, z) длины Length, ширины Width, нормалью Normal и направлением длины LengthDirection -function Rectangle3D(x, y, z, Length, Width: real; Normal, LengthDirection: Vector3D; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(x, y, z, Length, Width: real; Normal, LengthDirection: Vector3D; m: Material := nil): RectangleT; /// Возвращает 3D-прямоугольник с центром в точке p длины Length, ширины Width, нормалью Normal и направлением длины LengthDirection -function Rectangle3D(p: Point3D; Length, Width: real; Normal, LengthDirection: Vector3D; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(p: Point3D; Length, Width: real; Normal, LengthDirection: Vector3D; m: Material := nil): RectangleT; /// Возвращает 3D-прямоугольник с центром в точке (x, y, z) длины Length, ширины Width, нормалью Normal -function Rectangle3D(x, y, z, Length, Width: real; Normal: Vector3D; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(x, y, z, Length, Width: real; Normal: Vector3D; m: Material := nil): RectangleT; /// Возвращает 3D-прямоугольник с центром в точке (x, y, z) длины Length, ширины Width -function Rectangle3D(x, y, z, Length, Width: real; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(x, y, z, Length, Width: real; m: Material := nil): RectangleT; /// Возвращает 3D-прямоугольник с центром в точке p длины Length, ширины Width, нормалью Normal -function Rectangle3D(p: Point3D; Length, Width: real; Normal: Vector3D; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(p: Point3D; Length, Width: real; Normal: Vector3D; m: Material := nil): RectangleT; /// Возвращает 3D-прямоугольник с центром в точке p длины Length, ширины Width -function Rectangle3D(p: Point3D; Length, Width: real; m: Material := DefaultMaterial): RectangleT; +function Rectangle3D(p: Point3D; Length, Width: real; m: Material := nil): RectangleT; /// Загружает модель из файла в форматах .obj, .3ds, .lwo, .objz, .stl, .off и отображает ее в точке (x, y, z) function FileModel3D(x, y, z: real; fname: string; m: Material): FileModelT; @@ -3305,53 +3307,69 @@ function FileModel3D(x, y, z: real; fname: string; m: Material): FileModelT; function FileModel3D(p: Point3D; fname: string; m: Material): FileModelT; /// Возвращает правильную призму с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height и радиусом Radius -function Prism(x, y, z: real; Sides: integer; Height, Radius: real; m: Material := DefaultMaterial): PrismT; +function Prism(x, y, z: real; Sides: integer; Height, Radius: real; m: Material := nil): PrismT; /// Возвращает правильную призму с центром основания в точке p, количеством сторон Sides, высотой Height и радиусом Radius -function Prism(p: Point3D; Sides: integer; Height, Radius: real; m: Material := DefaultMaterial): PrismT; +function Prism(p: Point3D; Sides: integer; Height, Radius: real; m: Material := nil): PrismT; /// Возвращает проволочную правильную призму с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height, радиусом Radius и толщиной проволоки Thickness -function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real := 1.2; c: Color := GrayColor(64)): PrismTWireFrame; +function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame; +/// Возвращает проволочную правильную призму с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height, радиусом Radius и толщиной проволоки Thickness +function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real := 1.2): PrismTWireFrame; /// Возвращает проволочную правильную призму с центром основания в точке p, количеством сторон Sides, высотой Height, радиусом Radius и толщиной проволоки Thickness -function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real := 1.2; c: Color := GrayColor(64)): PrismTWireFrame; +function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame; +/// Возвращает проволочную правильную призму с центром основания в точке p, количеством сторон Sides, высотой Height, радиусом Radius и толщиной проволоки Thickness +function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real := 1.2): PrismTWireFrame; /// Возвращает правильную пирамиду с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height и радиусом Radius -function Pyramid(x, y, z: real; Sides: integer; Height, Radius: real; m: Material := DefaultMaterial): PyramidT; +function Pyramid(x, y, z: real; Sides: integer; Height, Radius: real; m: Material := nil): PyramidT; /// Возвращает правильную пирамиду с центром основания в точке p, количеством сторон Sides, высотой Height и радиусом Radius -function Pyramid(p: Point3D; Sides: integer; Height, Radius: real; m: Material := DefaultMaterial): PyramidT; +function Pyramid(p: Point3D; Sides: integer; Height, Radius: real; m: Material := nil): PyramidT; /// Возвращает проволочную правильную пирамиду с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height и радиусом Radius -function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real := 1.2; c: Color := GrayColor(64)): PyramidTWireFrame; +function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PyramidTWireFrame; +/// Возвращает проволочную правильную пирамиду с центром основания в точке (x, y, z), количеством сторон Sides, высотой Height и радиусом Radius +function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real := 1.2): PyramidTWireFrame; /// Возвращает проволочную правильную пирамиду с центром основания в точке p, количеством сторон Sides, высотой Height и радиусом Radius -function PyramidWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real := 1.2; c: Color := GrayColor(64)): PyramidTWireFrame; +function PyramidWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PyramidTWireFrame; +/// Возвращает проволочную правильную пирамиду с центром основания в точке p, количеством сторон Sides, высотой Height и радиусом Radius +function PyramidWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real := 1.2): PyramidTWireFrame; /// Возвращает лего-деталь с центром в точке (x, y, z), размера (Rows, Columns, Height), измеряемом в количестве кирпичиков по каждой размерности -function Lego(x, y, z: real; Rows, Columns, Height: integer; m: Material := DefaultMaterial): LegoT; +function Lego(x, y, z: real; Rows, Columns, Height: integer; m: Material := nil): LegoT; /// Возвращает икосаэдр с центром в точке (x, y, z) и радиусом описанной окружности Radius -function Icosahedron(x, y, z, Radius: real; m: Material := DefaultMaterial): IcosahedronT; +function Icosahedron(x, y, z, Radius: real; m: Material := nil): IcosahedronT; /// Возвращает додекаэдр с центром в точке (x, y, z) и радиусом описанной окружности Radius -function Dodecahedron(x, y, z, Radius: real; m: Material := DefaultMaterial): DodecahedronT; +function Dodecahedron(x, y, z, Radius: real; m: Material := nil): DodecahedronT; /// Возвращает тетраэдр с центром в точке (x, y, z) и радиусом описанной окружности Radius -function Tetrahedron(x, y, z, Radius: real; m: Material := DefaultMaterial): TetrahedronT; +function Tetrahedron(x, y, z, Radius: real; m: Material := nil): TetrahedronT; /// Возвращает октаэдр с центром в точке (x, y, z) и радиусом описанной окружности Radius -function Octahedron(x, y, z, Radius: real; m: Material := DefaultMaterial): OctahedronT; +function Octahedron(x, y, z, Radius: real; m: Material := nil): OctahedronT; /// Возвращает икосаэдр с центром в точке p и радиусом описанной окружности Radius -function Icosahedron(p: Point3D; Radius: real; m: Material := DefaultMaterial): IcosahedronT; +function Icosahedron(p: Point3D; Radius: real; m: Material := nil): IcosahedronT; /// Возвращает додекаэдр с центром в точке p и радиусом описанной окружности Radius -function Dodecahedron(p: Point3D; Radius: real; m: Material := DefaultMaterial): DodecahedronT; +function Dodecahedron(p: Point3D; Radius: real; m: Material := nil): DodecahedronT; /// Возвращает тетраэдр с центром в точке p и радиусом описанной окружности Radius -function Tetrahedron(p: Point3D; Radius: real; m: Material := DefaultMaterial): TetrahedronT; +function Tetrahedron(p: Point3D; Radius: real; m: Material := nil): TetrahedronT; /// Возвращает октаэдр с центром в точке p и радиусом описанной окружности Radius -function Octahedron(p: Point3D; Radius: real; m: Material := DefaultMaterial): OctahedronT; +function Octahedron(p: Point3D; Radius: real; m: Material := nil): OctahedronT; /// Возвращает набор отрезков, задаваемых последовательностью точек points, толщиной Thickness, заданного цвета. Количество точек должно быть четным -function Segments3D(points: sequence of Point3D; Thickness: real := 1.2; c: Color := GrayColor(64)): SegmentsT; +function Segments3D(points: sequence of Point3D; Thickness: real; c: Color): SegmentsT; +/// Возвращает набор отрезков, задаваемых последовательностью точек points, толщиной Thickness. Количество точек должно быть четным +function Segments3D(points: sequence of Point3D; Thickness: real := 1.2): SegmentsT; /// Возвращает ломаную, задаваемую последовательностью точек points, толщиной Thickness, заданного цвета -function Polyline3D(points: sequence of Point3D; Thickness: real := 1.2; c: Color := GrayColor(64)): SegmentsT; +function Polyline3D(points: sequence of Point3D; Thickness: real; c: Color): SegmentsT; +/// Возвращает ломаную, задаваемую последовательностью точек points, толщиной Thickness +function Polyline3D(points: sequence of Point3D; Thickness: real := 1.2): SegmentsT; /// Возвращает замкнутую ломаную, задаваемую последовательностью точек points, толщиной Thickness, заданного цвета -function Polygon3D(points: sequence of Point3D; Thickness: real := 1.2; c: Color := GrayColor(64)): SegmentsT; +function Polygon3D(points: sequence of Point3D; Thickness: real; c: Color): SegmentsT; +/// Возвращает замкнутую ломаную, задаваемую последовательностью точек points, толщиной Thickness +function Polygon3D(points: sequence of Point3D; Thickness: real := 1.2): SegmentsT; /// Возвращает отрезок из точки p1 в точку p2 толщиной Thickness заданного цвета -function Segment3D(p1, p2: Point3D; Thickness: real := 1.2; c: Color := GrayColor(64)): SegmentsT; +function Segment3D(p1, p2: Point3D; Thickness: real; c: Color): SegmentsT; +/// Возвращает отрезок из точки p1 в точку p2 толщиной Thickness заданного цвета +function Segment3D(p1, p2: Point3D; Thickness: real := 1.2): SegmentsT; /// Возвращает тор (бублик) с центром в точке (x, y, z), диаметром Diameter и диаметром трубы TubeDiameter -function Torus(x, y, z, Diameter, TubeDiameter: real; m: Material := DefaultMaterial): TorusT; +function Torus(x, y, z, Diameter, TubeDiameter: real; m: Material := nil): TorusT; /// Возвращает тор (бублик) с центром в точке p, диаметром Diameter и диаметром трубы TubeDiameter -function Torus(p: Point3D; Diameter, TubeDiameter: real; m: Material := DefaultMaterial): TorusT; +function Torus(p: Point3D; Diameter, TubeDiameter: real; m: Material := nil): TorusT; /// Возвращает треугольник, соединяющий точки p1, p2, p3 -function Triangle(p1, p2, p3: Point3D; m: Material := DefaultMaterial): TriangleT; +function Triangle(p1, p2, p3: Point3D; m: Material := nil): TriangleT; // Конец примитивов //------------------------------------------------------------------------------------ @@ -4116,8 +4134,6 @@ function Group(en: sequence of Object3D): Group3D := Inv(()->Group3D.Create(0, 0 function Sphere(x, y, z, Radius: real; m: Material): SphereT := Inv(()->SphereT.Create(x, y, z, Radius, m)); -function Sphere(x, y, z, Radius: real): SphereT := Sphere(x, y, z, Radius, DefaultMaterial); - function Sphere(center: Point3D; Radius: real; m: Material) := Sphere(center.x, center.y, center.z, Radius, m); function Ellipsoid(x, y, z, RadiusX, RadiusY, RadiusZ: real; m: Material): EllipsoidT := Inv(()->EllipsoidT.Create(x, y, z, RadiusX, RadiusY, RadiusZ, m)); @@ -4192,8 +4208,14 @@ function CoordinateSystem(ArrowsLength: real) := CoordinateSystem(arrowslength, function Text3D(x, y, z: real; Text: string; Height: real; fontname: string; c: Color): TextT := Inv(()->TextT.Create(x, y, z, text, height, fontname, c)); +function Text3D(x, y, z: real; Text: string; Height: real; FontName: string): TextT + := Text3D(x, y, z, Text, Height, FontName, Colors.Black); + function Text3D(p: Point3D; Text: string; Height: real; fontname: string; c: Color) := Text3D(P.x, p.y, p.z, text, height, fontname, c); +function Text3D(p: Point3D; Text: string; Height: real; FontName: string): TextT + := Text3D(p, Text, Height, FontName, Colors.Black); + function Text3D(x, y, z: real; Text: string; Height: real; c: Color) := Text3D(x, y, z, text, height, 'Arial', c); function Text3D(p: Point3D; Text: string; Height: real; c: Color) := Text3D(p.x, p.y, p.z, text, height, 'Arial', c); @@ -4221,16 +4243,28 @@ function Prism(p: Point3D; Sides: integer; Height, Radius: real; m: Material): P function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame := Inv(()->PrismTWireFrame.Create(x, y, z, Sides, Radius, Height, thickness, c)); +function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real): PrismTWireFrame + := PrismWireFrame(x, y, z, Sides, Height, Radius, Thickness, GrayColor(64)); + function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame := PrismWireFrame(p.x, p.y, p.z, Sides, Height, Radius, thickness, c); +function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real): PrismTWireFrame + := PrismWireFrame(p, Sides, Height, Radius, Thickness, GrayColor(64)); + function Pyramid(x, y, z: real; Sides: integer; Height, Radius: real; m: Material): PyramidT := Inv(()->PyramidT.Create(x, y, z, Sides, Radius, Height, m)); function Pyramid(p: Point3D; Sides: integer; Height, Radius: real; m: Material): PyramidT := Pyramid(p.X, p.Y, p.Z, Sides, Height, Radius, m); function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PyramidTWireFrame := Inv(()->PyramidTWireFrame.Create(x, y, z, Sides, Radius, Height, thickness, c)); +function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real): PyramidTWireFrame + := PyramidWireFrame(x, y, z, Sides, Height, Radius, Thickness, GrayColor(64)); + function PyramidWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PyramidTWireFrame := PyramidWireFrame(p.x, p.y, p.z, Sides, Height, Radius, thickness, c); +function PyramidWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real): PyramidTWireFrame + := PyramidWireFrame(p, Sides, Height, Radius, Thickness, GrayColor(64)); + function Lego(x, y, z: real; Rows, Columns, Height: integer; m: Material): LegoT := Inv(()->LegoT.Create(x, y, z, Rows, Columns, Height, m)); function Icosahedron(x, y, z, Radius: real; m: Material): IcosahedronT := Inv(()->IcosahedronT.Create(x, y, z, 4 * Radius / Sqrt(2) / Sqrt(5 + Sqrt(5)), m)); @@ -4251,6 +4285,18 @@ function Octahedron(p: Point3D; Radius: real; m: Material): OctahedronT := Octah function Segments3D(points: sequence of Point3D; thickness: real; c: Color): SegmentsT := Inv(()->SegmentsT.Create(points, thickness, c)); +function Segments3D(points: sequence of Point3D; Thickness: real): SegmentsT + := Segments3D(points, Thickness, GrayColor(64)); + +function Polyline3D(points: sequence of Point3D; Thickness: real): SegmentsT + := Polyline3D(points, Thickness, GrayColor(64)); + +function Polygon3D(points: sequence of Point3D; Thickness: real): SegmentsT + := Polygon3D(points, Thickness, GrayColor(64)); + +function Segment3D(p1, p2: Point3D; Thickness: real): SegmentsT + := Segment3D(p1, p2, Thickness, GrayColor(64)); + function Polyline3D(points: sequence of Point3D; thickness: real; c: Color): SegmentsT := Inv(()->SegmentsT.Create(points.Pairwise.SelectMany(x -> Seq(x[0], x[1])), thickness, c)); function Polygon3D(points: sequence of Point3D; thickness: real; c: Color): SegmentsT := Inv(()->SegmentsT.Create((points + points.First).Pairwise.SelectMany(x -> Seq(x[0], x[1])), thickness, c));