Преглед на файлове

Included grid options in TGLSkyDome

GLScene преди 2 години
родител
ревизия
c1d6fadd49

+ 2 - 2
Packages/GLScene_Cg_DT.dproj

@@ -166,12 +166,12 @@
                         <Overwrite>true</Overwrite>
                     </Platform>
                 </DeployFile>
-                <DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
+                <DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
                     <Platform Name="iOSSimulator">
                         <Overwrite>true</Overwrite>
                     </Platform>
                 </DeployFile>
-                <DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule">
+                <DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
                     <Platform Name="iOSSimulator">
                         <Overwrite>true</Overwrite>
                     </Platform>

+ 26 - 26
Packages/GLScene_RT.dpk

@@ -58,12 +58,12 @@ contains
   GLS.AVIRecorder in '..\Source\GLS.AVIRecorder.pas',
   GLS.AnimatedSprite in '..\Source\GLS.AnimatedSprite.pas',
   GLS.AnimationUtils in '..\Source\GLS.AnimationUtils.pas',
-  GLS.ApplicationFileIO in '..\Source\GLS.ApplicationFileIO.pas',
-  GLS.AsyncHDS in '..\Source\GLS.AsyncHDS.pas',
-  GLS.AsyncTimer in '..\Source\GLS.AsyncTimer.pas',
+  GLS.ApplicationFileIO in '..\Source\VCL\GLS.ApplicationFileIO.pas',
+  GLS.AsyncHDS in '..\Source\VCL\GLS.AsyncHDS.pas',
+  GLS.AsyncTimer in '..\Source\VCL\GLS.AsyncTimer.pas',
   GLS.Atmosphere in '..\Source\GLS.Atmosphere.pas',
   GLS.ArchiveManager in '..\Source\GLS.ArchiveManager.pas',
-  GLS.BaseClasses in '..\Source\GLS.BaseClasses.pas',
+  GLS.BaseClasses in '..\Source\VCL\GLS.BaseClasses.pas',
   GLS.BaseMeshSilhouette in '..\Source\GLS.BaseMeshSilhouette.pas',
   GLS.Behaviours in '..\Source\GLS.Behaviours.pas',
   GLS.BitmapFont in '..\Source\GLS.BitmapFont.pas',
@@ -134,16 +134,16 @@ contains
   GLS.FullScreenViewer in '..\Source\GLS.FullScreenViewer.pas',
   Scena.Keyboard in '..\Source\Common\Scena.Keyboard.pas',
   GLS.GameMenu in '..\Source\GLS.GameMenu.pas',
-  GLS.GeomObjects in '..\Source\GLS.GeomObjects.pas',
+  GLS.GeomObjects in '..\Source\VCL\GLS.GeomObjects.pas',
   GLS.GeometryBB in '..\Source\GLS.GeometryBB.pas',
   Scena.Generics in '..\Source\Common\Scena.Generics.pas',
-  GLS.Gizmo in '..\Source\GLS.Gizmo.pas',
-  GLS.GizmoEx in '..\Source\GLS.GizmoEx.pas',
-  GLS.Graph in '..\Source\GLS.Graph.pas',
-  GLS.Graphics in '..\Source\GLS.Graphics.pas',
-  GLS.Gui in '..\Source\GLS.Gui.pas',
+  GLS.Gizmo in '..\Source\VCL\GLS.Gizmo.pas',
+  GLS.GizmoEx in '..\Source\VCL\GLS.GizmoEx.pas',
+  GLS.Graph in '..\Source\VCL\GLS.Graph.pas',
+  GLS.Graphics in '..\Source\VCL\GLS.Graphics.pas',
+  GLS.Gui in '..\Source\VCL\GLS.Gui.pas',
   GLS.HUDObjects in '..\Source\GLS.HUDObjects.pas',
-  GLS.HeightData in '..\Source\GLS.HeightData.pas',
+  GLS.HeightData in '..\Source\VCL\GLS.HeightData.pas',
   GLS.HeightTileFileHDS in '..\Source\GLS.HeightTileFileHDS.pas',
   GLS.ImageUtils in '..\Source\GLS.ImageUtils.pas',
   GLS.Imposter in '..\Source\GLS.Imposter.pas',
@@ -152,7 +152,6 @@ contains
   GLS.Joystick in '..\Source\VCL\GLS.Joystick.pas',
   GLS.LensFlare in '..\Source\GLS.LensFlare.pas',
   GLS.LinePFX in '..\Source\GLS.LinePFX.pas',
-  Scena.Logger in '..\Source\Common\Scena.Logger.pas',
   GLS.Manager in '..\Source\GLS.Manager.pas',
   GLS.Material in '..\Source\GLS.Material.pas',
   GLS.MaterialEx in '..\Source\GLS.MaterialEx.pas',
@@ -171,8 +170,8 @@ contains
   GLS.MultiSampleImage in '..\Source\GLS.MultiSampleImage.pas',
   GLS.Navigator in '..\Source\GLS.Navigator.pas',
   GLS.Nodes in '..\Source\GLS.Nodes.pas',
-  GLS.ObjectManager in '..\Source\GLS.ObjectManager.pas',
-  GLS.Objects in '..\Source\GLS.Objects.pas',
+  GLS.ObjectManager in '..\Source\VCL\GLS.ObjectManager.pas',
+  GLS.Objects in '..\Source\VCL\GLS.Objects.pas',
   GLS.Octree in '..\Source\GLS.Octree.pas',
   GLS.ParametricSurfaces in '..\Source\GLS.ParametricSurfaces.pas',
   GLS.ParticleFX in '..\Source\GLS.ParticleFX.pas',
@@ -205,26 +204,26 @@ contains
   GLSL.ShaderParameter in '..\Source\GLSL.ShaderParameter.pas',
   GLSL.Shader in '..\Source\GLSL.Shader.pas',
   GLS.Language in '..\Source\VCL\GLS.Language.pas',
-  GLS.Memo in '..\Source\GLS.Memo.pas',
+  GLS.Memo in '..\Source\VCL\GLS.Memo.pas',
   GLS.ProjectedTextures in '..\Source\GLS.ProjectedTextures.pas',
-  GLS.Scene in '..\Source\GLS.Scene.pas',
-  GLS.SceneForm in '..\Source\GLS.SceneForm.pas',
-  GLS.Screen in '..\Source\GLS.Screen.pas',
+  GLS.Scene in '..\Source\VCL\GLS.Scene.pas',
+  GLS.SceneForm in '..\Source\VCL\GLS.SceneForm.pas',
+  GLS.Screen in '..\Source\VCL\GLS.Screen.pas',
   GLS.ScreenSaver in '..\Source\GLS.ScreenSaver.pas',
   GLS.Selection in '..\Source\GLS.Selection.pas',
   GLS.ShadowHDS in '..\Source\GLS.ShadowHDS.pas',
   GLS.ShadowPlane in '..\Source\GLS.ShadowPlane.pas',
   GLS.ShadowVolume in '..\Source\GLS.ShadowVolume.pas',
   GLS.SimpleNavigation in '..\Source\GLS.SimpleNavigation.pas',
-  GLS.SkyDome in '..\Source\GLS.SkyDome.pas',
+  GLS.SkyDome in '..\Source\VCL\GLS.SkyDome.pas',
   GLS.SmoothNavigator in '..\Source\GLS.SmoothNavigator.pas',
   GLS.SoundManager in '..\Source\GLS.SoundManager.pas',
   GLS.SoundFileObjects in '..\Source\GLS.SoundFileObjects.pas',
   GLS.SpacePartition in '..\Source\GLS.SpacePartition.pas',
   GLS.State in '..\Source\GLS.State.pas',
   GLS.SpaceText in '..\Source\GLS.SpaceText.pas',
-  GLS.SceneViewer in '..\Source\GLS.SceneViewer.pas',
-  GLS.SmartObjects in '..\Source\GLS.SmartObjects.pas',
+  GLS.SceneViewer in '..\Source\VCL\GLS.SceneViewer.pas',
+  GLS.SmartObjects in '..\Source\VCL\GLS.SmartObjects.pas',
   GLS.TerrainRenderer in '..\Source\GLS.TerrainRenderer.pas',
   GLS.TexLensFlare in '..\Source\GLS.TexLensFlare.pas',
   GLS.Texture in '..\Source\GLS.Texture.pas',
@@ -246,11 +245,6 @@ contains
   GLS.WindowsContext in '..\Source\GLS.WindowsContext.pas',
   GLS.WindowsFont in '..\Source\GLS.WindowsFont.pas',
   GLS.zBuffer in '..\Source\GLS.zBuffer.pas',
-  Scena.OpenGLAdapter in '..\Source\Common\Scena.OpenGLAdapter.pas',
-  GLS.PersistentClasses in '..\Source\GLS.PersistentClasses.pas',
-  Scena.PipelineTransformation in '..\Source\Common\Scena.PipelineTransformation.pas',
-  GLS.Polynomials in '..\Source\GLS.Polynomials.pas',
-  Scena.CrossXML in '..\Source\Common\Scena.CrossXML.pas',
   GLS.Silhouette in '..\Source\GLS.Silhouette.pas',
   GLS.VectorLists in '..\Source\GLS.VectorLists.pas',
   GLS.ScriptBase in '..\Source\GLS.ScriptBase.pas',
@@ -259,6 +253,11 @@ contains
   PasGLTF in '..\Source\Common\PasGLTF.pas',
   PasJSON in '..\Source\Common\PasJSON.pas',
   PasDblStrUtils in '..\Source\Common\PasDblStrUtils.pas',
+  GLS.PersistentClasses in '..\Source\GLS.PersistentClasses.pas',
+  Scena.OpenGLAdapter in '..\Source\Common\Scena.OpenGLAdapter.pas',
+  Scena.PipelineTransformation in '..\Source\Common\Scena.PipelineTransformation.pas',
+  Scena.Polynomials in '..\Source\Common\Scena.Polynomials.pas',
+  Scena.CrossXML in '..\Source\Common\Scena.CrossXML.pas',
   Scena.OpenGLTokens in '..\Source\Common\Scena.OpenGLTokens.pas',
   Scena.Spline in '..\Source\Common\Scena.Spline.pas',
   Scena.Strings in '..\Source\Common\Scena.Strings.pas',
@@ -266,6 +265,7 @@ contains
   Scena.VectorGeometry in '..\Source\Common\Scena.VectorGeometry.pas',
   Scena.VectorTypes in '..\Source\Common\Scena.VectorTypes.pas',
   Scena.VectorTypesExt in '..\Source\Common\Scena.VectorTypesExt.pas',
+  Scena.Logger in '..\Source\Common\Scena.Logger.pas',
   GLS.InitOpenGL in '..\Source\VCL\GLS.InitOpenGL.pas';
 
 end.

+ 26 - 26
Packages/GLScene_RT.dproj

@@ -162,12 +162,12 @@
         <DCCReference Include="..\Source\GLS.AVIRecorder.pas"/>
         <DCCReference Include="..\Source\GLS.AnimatedSprite.pas"/>
         <DCCReference Include="..\Source\GLS.AnimationUtils.pas"/>
-        <DCCReference Include="..\Source\GLS.ApplicationFileIO.pas"/>
-        <DCCReference Include="..\Source\GLS.AsyncHDS.pas"/>
-        <DCCReference Include="..\Source\GLS.AsyncTimer.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.ApplicationFileIO.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.AsyncHDS.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.AsyncTimer.pas"/>
         <DCCReference Include="..\Source\GLS.Atmosphere.pas"/>
         <DCCReference Include="..\Source\GLS.ArchiveManager.pas"/>
-        <DCCReference Include="..\Source\GLS.BaseClasses.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.BaseClasses.pas"/>
         <DCCReference Include="..\Source\GLS.BaseMeshSilhouette.pas"/>
         <DCCReference Include="..\Source\GLS.Behaviours.pas"/>
         <DCCReference Include="..\Source\GLS.BitmapFont.pas"/>
@@ -238,16 +238,16 @@
         <DCCReference Include="..\Source\GLS.FullScreenViewer.pas"/>
         <DCCReference Include="..\Source\Common\Scena.Keyboard.pas"/>
         <DCCReference Include="..\Source\GLS.GameMenu.pas"/>
-        <DCCReference Include="..\Source\GLS.GeomObjects.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.GeomObjects.pas"/>
         <DCCReference Include="..\Source\GLS.GeometryBB.pas"/>
         <DCCReference Include="..\Source\Common\Scena.Generics.pas"/>
-        <DCCReference Include="..\Source\GLS.Gizmo.pas"/>
-        <DCCReference Include="..\Source\GLS.GizmoEx.pas"/>
-        <DCCReference Include="..\Source\GLS.Graph.pas"/>
-        <DCCReference Include="..\Source\GLS.Graphics.pas"/>
-        <DCCReference Include="..\Source\GLS.Gui.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.Gizmo.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.GizmoEx.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.Graph.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.Graphics.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.Gui.pas"/>
         <DCCReference Include="..\Source\GLS.HUDObjects.pas"/>
-        <DCCReference Include="..\Source\GLS.HeightData.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.HeightData.pas"/>
         <DCCReference Include="..\Source\GLS.HeightTileFileHDS.pas"/>
         <DCCReference Include="..\Source\GLS.ImageUtils.pas"/>
         <DCCReference Include="..\Source\GLS.Imposter.pas"/>
@@ -256,7 +256,6 @@
         <DCCReference Include="..\Source\VCL\GLS.Joystick.pas"/>
         <DCCReference Include="..\Source\GLS.LensFlare.pas"/>
         <DCCReference Include="..\Source\GLS.LinePFX.pas"/>
-        <DCCReference Include="..\Source\Common\Scena.Logger.pas"/>
         <DCCReference Include="..\Source\GLS.Manager.pas"/>
         <DCCReference Include="..\Source\GLS.Material.pas"/>
         <DCCReference Include="..\Source\GLS.MaterialEx.pas"/>
@@ -275,8 +274,8 @@
         <DCCReference Include="..\Source\GLS.MultiSampleImage.pas"/>
         <DCCReference Include="..\Source\GLS.Navigator.pas"/>
         <DCCReference Include="..\Source\GLS.Nodes.pas"/>
-        <DCCReference Include="..\Source\GLS.ObjectManager.pas"/>
-        <DCCReference Include="..\Source\GLS.Objects.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.ObjectManager.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.Objects.pas"/>
         <DCCReference Include="..\Source\GLS.Octree.pas"/>
         <DCCReference Include="..\Source\GLS.ParametricSurfaces.pas"/>
         <DCCReference Include="..\Source\GLS.ParticleFX.pas"/>
@@ -309,26 +308,26 @@
         <DCCReference Include="..\Source\GLSL.ShaderParameter.pas"/>
         <DCCReference Include="..\Source\GLSL.Shader.pas"/>
         <DCCReference Include="..\Source\VCL\GLS.Language.pas"/>
-        <DCCReference Include="..\Source\GLS.Memo.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.Memo.pas"/>
         <DCCReference Include="..\Source\GLS.ProjectedTextures.pas"/>
-        <DCCReference Include="..\Source\GLS.Scene.pas"/>
-        <DCCReference Include="..\Source\GLS.SceneForm.pas"/>
-        <DCCReference Include="..\Source\GLS.Screen.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.Scene.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.SceneForm.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.Screen.pas"/>
         <DCCReference Include="..\Source\GLS.ScreenSaver.pas"/>
         <DCCReference Include="..\Source\GLS.Selection.pas"/>
         <DCCReference Include="..\Source\GLS.ShadowHDS.pas"/>
         <DCCReference Include="..\Source\GLS.ShadowPlane.pas"/>
         <DCCReference Include="..\Source\GLS.ShadowVolume.pas"/>
         <DCCReference Include="..\Source\GLS.SimpleNavigation.pas"/>
-        <DCCReference Include="..\Source\GLS.SkyDome.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.SkyDome.pas"/>
         <DCCReference Include="..\Source\GLS.SmoothNavigator.pas"/>
         <DCCReference Include="..\Source\GLS.SoundManager.pas"/>
         <DCCReference Include="..\Source\GLS.SoundFileObjects.pas"/>
         <DCCReference Include="..\Source\GLS.SpacePartition.pas"/>
         <DCCReference Include="..\Source\GLS.State.pas"/>
         <DCCReference Include="..\Source\GLS.SpaceText.pas"/>
-        <DCCReference Include="..\Source\GLS.SceneViewer.pas"/>
-        <DCCReference Include="..\Source\GLS.SmartObjects.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.SceneViewer.pas"/>
+        <DCCReference Include="..\Source\VCL\GLS.SmartObjects.pas"/>
         <DCCReference Include="..\Source\GLS.TerrainRenderer.pas"/>
         <DCCReference Include="..\Source\GLS.TexLensFlare.pas"/>
         <DCCReference Include="..\Source\GLS.Texture.pas"/>
@@ -350,11 +349,6 @@
         <DCCReference Include="..\Source\GLS.WindowsContext.pas"/>
         <DCCReference Include="..\Source\GLS.WindowsFont.pas"/>
         <DCCReference Include="..\Source\GLS.zBuffer.pas"/>
-        <DCCReference Include="..\Source\Common\Scena.OpenGLAdapter.pas"/>
-        <DCCReference Include="..\Source\GLS.PersistentClasses.pas"/>
-        <DCCReference Include="..\Source\Common\Scena.PipelineTransformation.pas"/>
-        <DCCReference Include="..\Source\GLS.Polynomials.pas"/>
-        <DCCReference Include="..\Source\Common\Scena.CrossXML.pas"/>
         <DCCReference Include="..\Source\GLS.Silhouette.pas"/>
         <DCCReference Include="..\Source\GLS.VectorLists.pas"/>
         <DCCReference Include="..\Source\GLS.ScriptBase.pas"/>
@@ -363,6 +357,11 @@
         <DCCReference Include="..\Source\Common\PasGLTF.pas"/>
         <DCCReference Include="..\Source\Common\PasJSON.pas"/>
         <DCCReference Include="..\Source\Common\PasDblStrUtils.pas"/>
+        <DCCReference Include="..\Source\GLS.PersistentClasses.pas"/>
+        <DCCReference Include="..\Source\Common\Scena.OpenGLAdapter.pas"/>
+        <DCCReference Include="..\Source\Common\Scena.PipelineTransformation.pas"/>
+        <DCCReference Include="..\Source\Common\Scena.Polynomials.pas"/>
+        <DCCReference Include="..\Source\Common\Scena.CrossXML.pas"/>
         <DCCReference Include="..\Source\Common\Scena.OpenGLTokens.pas"/>
         <DCCReference Include="..\Source\Common\Scena.Spline.pas"/>
         <DCCReference Include="..\Source\Common\Scena.Strings.pas"/>
@@ -370,6 +369,7 @@
         <DCCReference Include="..\Source\Common\Scena.VectorGeometry.pas"/>
         <DCCReference Include="..\Source\Common\Scena.VectorTypes.pas"/>
         <DCCReference Include="..\Source\Common\Scena.VectorTypesExt.pas"/>
+        <DCCReference Include="..\Source\Common\Scena.Logger.pas"/>
         <DCCReference Include="..\Source\VCL\GLS.InitOpenGL.pas"/>
         <None Include="..\Source\Common\Scena.inc"/>
         <BuildConfiguration Include="Base">

+ 1 - 2
Source/GLS.Polynomials.pas → Source/Common/Scena.Polynomials.pas

@@ -1,8 +1,7 @@
 //
 // The graphics platform GLScene https://github.com/glscene
 //
-
-unit GLS.Polynomials;
+unit Scena.Polynomials;
 
 (*
   Utility functions for manipulationg and solving polynomials.

+ 0 - 492
Source/GLS.Spline.pas

@@ -1,492 +0,0 @@
-//
-// The graphics platform GLScene https://github.com/glscene
-//
-unit Scena.Spline;
-
-(* Cubic spline interpolation functions *)
-
-interface
-
-uses
-  Scena.VectorTypes,
-  Scena.VectorGeometry;
-
-{$I Scena.inc}
-
-type
-
-  TCubicSplineMatrix = array of array [0 .. 3] of Single;
-
-  (* 3D cubic spline handler class.
-    This class allows to describe and calculate values of a time-based,
-    three-dimensionnal cubic spline.
-    Cubic spline pass through all given points and tangent on point N is
-    given by the (N-1) to (N+1) vector.
-    Note : X, Y & Z are actually interpolated independently. *)
-  TCubicSpline = class(TObject)
-  private
-    matX, matY, matZ, matW: TCubicSplineMatrix;
-    FNb: Integer;
-  public
-    (* Creates the spline and declares interpolation points.
-      Time references go from 0 (first point) to nb-1 (last point), the
-      first and last reference matrices respectively are used when T is
-      used beyond this range.
-      Note : "nil" single arrays are accepted, in this case the axis is
-      disabled and calculus will return 0 (zero) for this component. *)
-    constructor Create(const X, Y, Z, W: PFloatArray; const nb: Integer);
-    {$IFDEF CLR} unsafe; {$ENDIF}
-    destructor Destroy; override;
-    // Calculates X component at time t. 
-    function SplineX(const t: Single): Single;
-    // Calculates Y component at time t. 
-    function SplineY(const t: Single): Single;
-    // Calculates Z component at time t. 
-    function SplineZ(const t: Single): Single;
-    // Calculates W component at time t. 
-    function SplineW(const t: Single): Single;
-    // Calculates X and Y components at time t. 
-    procedure SplineXY(const t: Single; out X, Y: Single);
-    // Calculates X, Y and Z components at time t. 
-    procedure SplineXYZ(const t: Single; out X, Y, Z: Single);
-    // Calculates X, Y, Z and W components at time t. 
-    procedure SplineXYZW(const t: Single; out X, Y, Z, W: Single);
-    // Calculates affine vector at time t. 
-    function SplineAffineVector(const t: Single): TAffineVector; overload;
-    // Calculates affine vector at time t. 
-    procedure SplineAffineVector(const t: Single;
-      var vector: TAffineVector); overload;
-    // Calculates vector at time t. 
-    function SplineVector(const t: Single): TGLVector; overload;
-    // Calculates vector at time t. 
-    procedure SplineVector(const t: Single; var vector: TGLVector); overload;
-    // Calculates X component slope at time t. 
-    function SplineSlopeX(const t: Single): Single;
-    // Calculates Y component slope at time t. 
-    function SplineSlopeY(const t: Single): Single;
-    // Calculates Z component slope at time t. 
-    function SplineSlopeZ(const t: Single): Single;
-    // Calculates W component slope at time t. 
-    function SplineSlopeW(const t: Single): Single;
-    // Calculates the spline slope at time t. 
-    function SplineSlopeVector(const t: Single): TAffineVector; overload;
-    (* Calculates the intersection of the spline with the YZ plane.
-      Returns True if an intersection was found. *)
-    function SplineIntersecYZ(X: Single; var Y, Z: Single): Boolean;
-    (* Calculates the intersection of the spline with the XZ plane.
-      Returns True if an intersection was found. *)
-    function SplineIntersecXZ(Y: Single; var X, Z: Single): Boolean;
-    (* Calculates the intersection of the spline with the XY plane.
-      Returns True if an intersection was found. *)
-    function SplineIntersecXY(Z: Single; var X, Y: Single): Boolean;
-  end;
-
-// ------------------------------------------------------------------
-implementation
-// ------------------------------------------------------------------
-
-procedure VECCholeskyTriDiagResol(const b: array of Single; const nb: Integer;
-  var Result: array of Single);
-var
-  Y, LDiag, LssDiag: array of Single;
-  i, k, Debut, Fin: Integer;
-begin
-  Debut := 0;
-  Fin := nb - 1;
-  Assert(Length(b) > 0);
-  SetLength(LDiag, nb);
-  SetLength(LssDiag, nb - 1);
-  LDiag[Debut] := 1.4142135; // = sqrt(2)
-  LssDiag[Debut] := 1.0 / 1.4142135;
-  for k := Debut + 1 to Fin - 1 do
-  begin
-    LDiag[k] := Sqrt(4 - LssDiag[k - 1] * LssDiag[k - 1]);
-    LssDiag[k] := 1.0 / LDiag[k];
-  end;
-  LDiag[Fin] := Sqrt(2 - LssDiag[Fin - 1] * LssDiag[Fin - 1]);
-  SetLength(Y, nb);
-  Y[Debut] := b[Debut] / LDiag[Debut];
-  for i := Debut + 1 to Fin do
-    Y[i] := (b[i] - Y[i - 1] * LssDiag[i - 1]) / LDiag[i];
-  Assert(Length(Result) = nb);
-  Result[Fin] := Y[Fin] / LDiag[Fin];
-  for i := Fin - 1 downto Debut do
-    Result[i] := (Y[i] - Result[i + 1] * LssDiag[i]) / LDiag[i];
-end;
-
-procedure MATInterpolationHermite(const ordonnees: PFloatArray;
-  const nb: Integer; var Result: TCubicSplineMatrix); {$IFDEF CLR}unsafe;
-{$ENDIF}
-var
-  a, b, c, d: Single;
-  i, n: Integer;
-  bb, deriv: array of Single;
-begin
-  Result := nil;
-  if Assigned(ordonnees) and (nb > 0) then
-  begin
-    n := nb - 1;
-    SetLength(bb, nb);
-    bb[0] := 3 * (ordonnees[1] - ordonnees[0]);
-    bb[n] := 3 * (ordonnees[n] - ordonnees[n - 1]);
-    for i := 1 to n - 1 do
-      bb[i] := 3 * (ordonnees[i + 1] - ordonnees[i - 1]);
-    SetLength(deriv, nb);
-    VECCholeskyTriDiagResol(bb, nb, deriv);
-    SetLength(Result, n);
-    for i := 0 to n - 1 do
-    begin
-      a := ordonnees[i];
-      b := deriv[i];
-      c := 3 * (ordonnees[i + 1] - ordonnees[i]) - 2 * deriv[i] - deriv[i + 1];
-      d := -2 * (ordonnees[i + 1] - ordonnees[i]) + deriv[i] + deriv[i + 1];
-      Result[i][3] := a + i * (i * (c - i * d) - b);
-      Result[i][2] := b + i * (3 * i * d - 2 * c);
-      Result[i][1] := c - 3 * i * d;
-      Result[i][0] := d;
-    end;
-  end;
-end;
-
-function MATValeurSpline(const spline: TCubicSplineMatrix; const X: Single;
-  const nb: Integer): Single;
-var
-  i: Integer;
-begin
-  if Length(spline) > 0 then
-  begin
-    if X <= 0 then
-      i := 0
-    else if X > nb - 1 then
-      i := nb - 1
-    else
-      i := Integer(Trunc(X));
-    { TODO : the following line looks like a bug... }
-    if i = (nb - 1) then
-      Dec(i);
-    Result := ((spline[i][0] * X + spline[i][1]) * X + spline[i][2]) * X +
-      spline[i][3];
-  end
-  else
-    Result := 0;
-end;
-
-function MATValeurSplineSlope(const spline: TCubicSplineMatrix; const X: Single;
-  const nb: Integer): Single;
-var
-  i: Integer;
-begin
-  if Length(spline) > 0 then
-  begin
-    if X <= 0 then
-      i := 0
-    else if X > nb - 1 then
-      i := nb - 1
-    else
-      i := Integer(Trunc(X));
-    { TODO : the following line looks like a bug... }
-    if i = (nb - 1) then
-      Dec(i);
-    Result := (3 * spline[i][0] * X + 2 * spline[i][1]) * X + spline[i][2];
-  end
-  else
-    Result := 0;
-end;
-
-// ------------------
-// ------------------ TCubicSpline ------------------
-// ------------------
-
-constructor TCubicSpline.Create(const X, Y, Z, W: PFloatArray;
-  const nb: Integer); {$IFDEF CLR}unsafe; {$ENDIF}
-begin
-  inherited Create;
-  MATInterpolationHermite(X, nb, matX);
-  MATInterpolationHermite(Y, nb, matY);
-  MATInterpolationHermite(Z, nb, matZ);
-  MATInterpolationHermite(W, nb, matW);
-  FNb := nb;
-end;
-
-destructor TCubicSpline.Destroy;
-begin
-  inherited Destroy;
-end;
-
-function TCubicSpline.SplineX(const t: Single): Single;
-begin
-  Result := MATValeurSpline(matX, t, FNb);
-end;
-
-function TCubicSpline.SplineY(const t: Single): Single;
-begin
-  Result := MATValeurSpline(matY, t, FNb);
-end;
-
-function TCubicSpline.SplineZ(const t: Single): Single;
-begin
-  Result := MATValeurSpline(matZ, t, FNb);
-end;
-
-function TCubicSpline.SplineW(const t: Single): Single;
-begin
-  Result := MATValeurSpline(matW, t, FNb);
-end;
-
-procedure TCubicSpline.SplineXY(const t: Single; out X, Y: Single);
-begin
-  X := MATValeurSpline(matX, t, FNb);
-  Y := MATValeurSpline(matY, t, FNb);
-end;
-
-procedure TCubicSpline.SplineXYZ(const t: Single; out X, Y, Z: Single);
-begin
-  X := MATValeurSpline(matX, t, FNb);
-  Y := MATValeurSpline(matY, t, FNb);
-  Z := MATValeurSpline(matZ, t, FNb);
-end;
-
-procedure TCubicSpline.SplineXYZW(const t: Single; out X, Y, Z, W: Single);
-begin
-  X := MATValeurSpline(matX, t, FNb);
-  Y := MATValeurSpline(matY, t, FNb);
-  Z := MATValeurSpline(matZ, t, FNb);
-  W := MATValeurSpline(matW, t, FNb);
-end;
-
-function TCubicSpline.SplineAffineVector(const t: Single): TAffineVector;
-begin
-  Result.X := MATValeurSpline(matX, t, FNb);
-  Result.Y := MATValeurSpline(matY, t, FNb);
-  Result.Z := MATValeurSpline(matZ, t, FNb);
-end;
-
-procedure TCubicSpline.SplineAffineVector(const t: Single;
-  var vector: TAffineVector);
-begin
-  vector.X := MATValeurSpline(matX, t, FNb);
-  vector.Y := MATValeurSpline(matY, t, FNb);
-  vector.Z := MATValeurSpline(matZ, t, FNb);
-end;
-
-function TCubicSpline.SplineVector(const t: Single): TGLVector;
-begin
-  Result.X := MATValeurSpline(matX, t, FNb);
-  Result.Y := MATValeurSpline(matY, t, FNb);
-  Result.Z := MATValeurSpline(matZ, t, FNb);
-  Result.W := MATValeurSpline(matW, t, FNb);
-end;
-
-procedure TCubicSpline.SplineVector(const t: Single; var vector: TGLVector);
-begin
-  vector.X := MATValeurSpline(matX, t, FNb);
-  vector.Y := MATValeurSpline(matY, t, FNb);
-  vector.Z := MATValeurSpline(matZ, t, FNb);
-  vector.W := MATValeurSpline(matW, t, FNb);
-end;
-
-function TCubicSpline.SplineSlopeX(const t: Single): Single;
-begin
-  Result := MATValeurSplineSlope(matX, t, FNb);
-end;
-
-function TCubicSpline.SplineSlopeY(const t: Single): Single;
-begin
-  Result := MATValeurSplineSlope(matY, t, FNb);
-end;
-
-function TCubicSpline.SplineSlopeZ(const t: Single): Single;
-begin
-  Result := MATValeurSplineSlope(matZ, t, FNb);
-end;
-
-function TCubicSpline.SplineSlopeW(const t: Single): Single;
-begin
-  Result := MATValeurSplineSlope(matW, t, FNb);
-end;
-
-function TCubicSpline.SplineSlopeVector(const t: Single): TAffineVector;
-begin
-  Result.X := MATValeurSplineSlope(matX, t, FNb);
-  Result.Y := MATValeurSplineSlope(matY, t, FNb);
-  Result.Z := MATValeurSplineSlope(matZ, t, FNb);
-end;
-
-function TCubicSpline.SplineIntersecYZ(X: Single; var Y, Z: Single): Boolean;
-var
-  Sup, Inf, Mid: Single;
-  SSup, Sinf, Smid: Single;
-begin
-  Result := False;
-
-  Sup := FNb;
-  Inf := 0.0;
-
-  SSup := SplineX(Sup);
-  Sinf := SplineX(Inf);
-  if SSup > Sinf then
-  begin
-    if (SSup < X) or (Sinf > X) then
-      Exit;
-    while Abs(SSup - Sinf) > 1E-4 do
-    begin
-      Mid := (Sup + Inf) * 0.5;
-      Smid := SplineX(Mid);
-      if X < Smid then
-      begin
-        SSup := Smid;
-        Sup := Mid;
-      end
-      else
-      begin
-        Sinf := Smid;
-        Inf := Mid;
-      end;
-    end;
-    Y := SplineY((Sup + Inf) * 0.5);
-    Z := SplineZ((Sup + Inf) * 0.5);
-  end
-  else
-  begin
-    if (Sinf < X) or (SSup > X) then
-      Exit;
-    while Abs(SSup - Sinf) > 1E-4 do
-    begin
-      Mid := (Sup + Inf) * 0.5;
-      Smid := SplineX(Mid);
-      if X < Smid then
-      begin
-        Sinf := Smid;
-        Inf := Mid;
-      end
-      else
-      begin
-        SSup := Smid;
-        Sup := Mid;
-      end;
-    end;
-    Y := SplineY((Sup + Inf) * 0.5);
-    Z := SplineZ((Sup + Inf) * 0.5);
-  end;
-  Result := True;
-end;
-
-function TCubicSpline.SplineIntersecXZ(Y: Single; var X, Z: Single): Boolean;
-var
-  Sup, Inf, Mid: Single;
-  SSup, Sinf, Smid: Single;
-begin
-  Result := False;
-
-  Sup := FNb;
-  Inf := 0.0;
-
-  SSup := SplineY(Sup);
-  Sinf := SplineY(Inf);
-  if SSup > Sinf then
-  begin
-    if (SSup < Y) or (Sinf > Y) then
-      Exit;
-    while Abs(SSup - Sinf) > 1E-4 do
-    begin
-      Mid := (Sup + Inf) * 0.5;
-      Smid := SplineY(Mid);
-      if Y < Smid then
-      begin
-        SSup := Smid;
-        Sup := Mid;
-      end
-      else
-      begin
-        Sinf := Smid;
-        Inf := Mid;
-      end;
-    end;
-    X := SplineX((Sup + Inf) * 0.5);
-    Z := SplineZ((Sup + Inf) * 0.5);
-  end
-  else
-  begin
-    if (Sinf < Y) or (SSup > Y) then
-      Exit;
-    while Abs(SSup - Sinf) > 1E-4 do
-    begin
-      Mid := (Sup + Inf) * 0.5;
-      Smid := SplineY(Mid);
-      if Y < Smid then
-      begin
-        Sinf := Smid;
-        Inf := Mid;
-      end
-      else
-      begin
-        SSup := Smid;
-        Sup := Mid;
-      end;
-    end;
-    X := SplineX((Sup + Inf) * 0.5);
-    Z := SplineZ((Sup + Inf) * 0.5);
-  end;
-  Result := True;
-end;
-
-function TCubicSpline.SplineIntersecXY(Z: Single; var X, Y: Single): Boolean;
-var
-  Sup, Inf, Mid: Single;
-  SSup, Sinf, Smid: Single;
-begin
-  Result := False;
-
-  Sup := FNb;
-  Inf := 0.0;
-
-  SSup := SplineZ(Sup);
-  Sinf := SplineZ(Inf);
-  if SSup > Sinf then
-  begin
-    if (SSup < Z) or (Sinf > Z) then
-      Exit;
-    while Abs(SSup - Sinf) > 1E-4 do
-    begin
-      Mid := (Sup + Inf) * 0.5;
-      Smid := SplineZ(Mid);
-      if Z < Smid then
-      begin
-        SSup := Smid;
-        Sup := Mid;
-      end
-      else
-      begin
-        Sinf := Smid;
-        Inf := Mid;
-      end;
-    end;
-    X := SplineX((Sup + Inf) * 0.5);
-    Y := SplineY((Sup + Inf) * 0.5);
-  end
-  else
-  begin
-    if (Sinf < Z) or (SSup > Z) then
-      Exit;
-    while Abs(SSup - Sinf) > 1E-4 do
-    begin
-      Mid := (Sup + Inf) * 0.5;
-      Smid := SplineZ(Mid);
-      if Z < Smid then
-      begin
-        Sinf := Smid;
-        Inf := Mid;
-      end
-      else
-      begin
-        SSup := Smid;
-        Sup := Mid;
-      end;
-    end;
-    X := SplineX((Sup + Inf) * 0.5);
-    Y := SplineY((Sup + Inf) * 0.5);
-  end;
-  Result := True;
-end;
-
-end.

+ 0 - 0
Source/GLS.ApplicationFileIO.pas → Source/VCL/GLS.ApplicationFileIO.pas


+ 0 - 1
Source/GLS.AsyncHDS.pas → Source/VCL/GLS.AsyncHDS.pas

@@ -1,7 +1,6 @@
 //
 // The graphics platform GLScene https://github.com/glscene
 //
-
 unit GLS.AsyncHDS;
 
 (*

+ 0 - 0
Source/GLS.AsyncTimer.pas → Source/VCL/GLS.AsyncTimer.pas


+ 0 - 0
Source/GLS.BaseClasses.pas → Source/VCL/GLS.BaseClasses.pas


+ 5 - 4
Source/GLS.GeomObjects.pas → Source/VCL/GLS.GeomObjects.pas

@@ -22,17 +22,18 @@ uses
 
   Scena.OpenGLTokens,
   Scena.OpenGLAdapter,
+  Scena.VectorTypes,
+  Scena.VectorGeometry,
+  Scena.PipelineTransformation,
+  Scena.Polynomials,
+
   GLS.Scene,
   GLS.State,
   GLS.PersistentClasses,
-  Scena.VectorGeometry,
   GLS.VectorLists,
-  GLS.Polynomials,
   GLS.Silhouette,
-  Scena.VectorTypes,
   GLS.GeometryBB,
   GLS.VectorFileObjects,
-  Scena.PipelineTransformation,
   GLS.Material,
   GLS.Texture,
 

+ 14 - 38
Source/GLS.Gizmo.pas → Source/VCL/GLS.Gizmo.pas

@@ -1,33 +1,12 @@
 //
 // The graphics platform GLScene https://github.com/glscene
 //
-
 unit GLS.Gizmo;
 
 (*
   Invisible component for helping to Move, Rotate and Scale an Object
-  under GLScene (usefull for an Editor). 
+  under GLScene (usefull for an Editor).
 *)
-//
-// Original Header:
-//
-// ------------------------------------------------------------------------------
-// Unit : GLS.Gizmo  RC 1.0
-// ------------------------------------------------------------------------------
-// Original Author : ???????  (GLS.Gizmo In an ODEEditor)
-// ------------------------------------------------------------------------------
-// Modified by     : J.Delauney
-// Web Site        : http://KheopsInteractive.cjb.net
-// EMail           : [email protected]
-// Date            : 08/05/2005
-//
-// Modified by     : Marcus Oblak (8/3/2007)
-// - Corrected moving/rotating for children objects
-// - Better quantization for mouse operations (MoveCoef,RotationCoef)
-// - Added ScaleCoef
-// - Added GizmoThickness
-//
-// If you make some changes, please send your new version. Thanks
 // ------------------------------------------------------------------------------
 // Description :
 // Invisible component for helping to Move, Rotate and Scale an Object
@@ -40,14 +19,13 @@ unit GLS.Gizmo;
 // - Add Interactive Camera Movements
 // - Adding Extended Controls with Keys
 // - Maybe An Undo Function
-// - Others Ideas ???
 // ------------------------------------------------------------------------------
 // Bugs Known :
 // - When you change the BoundingBoxColor and LabelInfosColor
 // The New Color is not Updated immediately, only after a new Click
 // (see in UpdateGizmo, SetBoundingBoxColor
 // and SetLabelInfosColor Procedures)
-// -  DaStr: Bounding Box is not always drawn correctly because it does not
+// -  Bounding Box is not always drawn correctly because it does not
 // use objects' BarryCenter. For Example, if you select Space Text.
 // ------------------------------------------------------------------------------
 
@@ -60,13 +38,15 @@ uses
   System.SysUtils,
   Vcl.StdCtrls,
 
+  Scena.VectorTypes,
+  Scena.VectorGeometry,
+  Scena.Strings,
+
   GLS.Scene,
   GLS.PersistentClasses,
   GLS.Color,
   GLS.Objects,
-  Scena.VectorGeometry,
   GLS.Material,
-  Scena.Strings,
   GLS.GeomObjects,
   GLS.BitmapFont,
   GLS.SceneViewer,
@@ -74,8 +54,7 @@ uses
   GLS.Coordinates,
   GLS.RenderContextInfo,
   GLS.State,
-  GLS.Selection,
-  Scena.VectorTypes;
+  GLS.Selection;
 
 type
   TGLGizmoUndoCollection = class;
@@ -217,8 +196,7 @@ type
     FLabelFont: TGLCustomBitmapFont;
     procedure SetRootGizmo(const AValue: TGLBaseSceneObject);
     procedure SetGizmoElements(const AValue: TGLGizmoElements);
-    procedure SeTGLGizmoVisibleInfoLabels(const AValue
-      : TGLGizmoVisibleInfoLabels);
+    procedure SeTGLGizmoVisibleInfoLabels(const AValue: TGLGizmoVisibleInfoLabels);
     procedure SetBoundingBoxColor(const AValue: TGLColor);
     procedure SetSelectedColor(const AValue: TGLColor);
     procedure SetVisibleInfoLabelsColor(const AValue: TGLColor);
@@ -284,16 +262,15 @@ type
     property NoZWrite: Boolean read FNoZWrite write FNoZWrite;
     property GizmoThickness: Single read FGizmoThickness
       write SeTGLGizmoThickness;
-    {  Indicates whether the gizmo is enabled or not.
+    (*  Indicates whether the gizmo is enabled or not.
       WARNING: When loading/editing (possibly whenever a structureChanged
       call is made) a model, sometimes the gizmo will trigger a
       bug if the mouse is inside the glscene Viewer. To prevent that,
       remember to disable the gizmo before loading, then process windows
-      messages (i.e. application.processMessage) and then enable the gizmo
-      again. }
-    {  Warning Enable is ReadOnly property if you set to False, Gizmo is not Hidden
+      messages (i.e. application.processMessage) and then enable the gizmo again.
+      Warning Enable is ReadOnly property if you set to False, Gizmo is not Hidden
       use Visible instead if you want to Hide, if you want to Hide but keep enabled
-      see the VisibleGizmo property }
+      see the VisibleGizmo property *)
     property Enabled: Boolean read FEnabled write FEnabled default False;
     property LabelFont: TGLCustomBitmapFont read FLabelFont write SetLabelFont
       default nil;
@@ -301,9 +278,8 @@ type
       write FOnBeforeSelect;
     property OnSelectionLost: TNotifyEvent read FOnSelectionLost
       write FOnSelectionLost;
-    {  Called before an Update is applied. The "vector" parameter is the difference
-      that will be applied to the object, according to the axis and
-      operation selected. }
+    (*  Called before an Update is applied. The "vector" parameter is the difference
+      that will be applied to the object, according to the axis and operation selected. *)
     property OnBeforeUpdate: TGLGizmoUpdateEvent read FOnBeforeUpdate
       write FOnBeforeUpdate;
     property PickMode: TGLGizmoPickMode read FPickMode write FPickMode

+ 14 - 27
Source/GLS.GizmoEx.pas → Source/VCL/GLS.GizmoEx.pas

@@ -1,7 +1,6 @@
 //
 // The graphics platform GLScene https://github.com/glscene
 //
-
 unit GLS.GizmoEx;
 
 (*
@@ -129,12 +128,9 @@ type
   TInfoLabelCoordType = (ilcChanging, ilcChangeRate);
 
   TGLGizmoExAxis = (gaNone, gaX, gaY, gaZ, gaXY, gaXZ, gaYZ, gaXYZ);
-
-  TGLGizmoExSelectionRegion = (gsrRectangular, gsrCircular, gsrFence,
-    gsrLasso);
+  TGLGizmoExSelectionRegion = (gsrRectangular, gsrCircular, gsrFence, gsrLasso);
 
   TGLGizmoExReferenceCoordinateSystem = (rcsView, rcsLocal);
-
   TGLGizmoExSelRec = array of TPoint;
 
   TGLGizmoExOperation = (gopMove, gopRotate, gopScale, gopNone);
@@ -221,9 +217,7 @@ type
   TGLGizmoEx = class(TComponent)
   private
     FUIBaseGizmo: TGLBaseSceneObject;
-
     FUIRootHelpers: TGLBaseSceneObject;
-
     FUIRootSelect: TGLBaseSceneObject; // for None
     FUIRootMovement: TGLBaseSceneObject; // for Move
     FUIRootRotate: TGLBaseSceneObject; //for Rotate
@@ -233,7 +227,6 @@ type
     FUIRootVisibleInfoLabels: TGLBaseSceneObject;
     FInterfaceRender: TGLDirectOpenGL;
     FInternalRender: TGLDirectOpenGL;
-
     FUISelectLineX, FUISelectLineY, FUISelectLineZ: TGLGizmoExUILines;  //  For None (Select)
 
     //IC- Invisible Control
@@ -253,15 +246,12 @@ type
 
     //ForScale
     FUIScaleArrowX, FUIScaleArrowY, FUIScaleArrowZ: TGLGizmoExUISphere; // For Scale
-
     FUIScaleLineX, FUIScaleLineY, FUIScaleLineZ, FUIScaleLineXY, FUIScaleLineYZ, FUIScaleLineXZ: TGLGizmoExUILines;
-
     FUIICScaleLineX, FUIICScaleLineY, FUIICScaleLineZ, FUIICScaleLineXY, FUIICScaleLineXZ, FUIICScaleLineYZ, FUIICScaleLineXYZ: TGLGizmoExUIFrustrum;
     FUIScalePlaneXY, FUIScalePlaneXZ, FUIScalePlaneYZ, FUIScalePlaneXYZ: TGLGizmoExUIPolyGon; // For Move
 
     FUIAxisLabelX, FUIAxisLabelY, FUIAxisLabelZ: TGLGizmoExUIFlatText;
     FUIVisibleInfoLabels: TGLGizmoExUIFlatText;
-
     FRootGizmo: TGLBaseSceneObject;
     FRootObjects: TGLBaseSceneObject;
     FGizmoTmpRoot: TGLBaseSceneObject;
@@ -1131,7 +1121,7 @@ begin
   with FUIRotateLineX do
   begin
     Options := [loUseNodeColorForLines];
-    //Äëÿ èñïðàâëåíèÿ ïðîáëåì ñ ïðîçðà÷íîñòüþ
+    // To fix transparency issues
     lineColor.Alpha := 0.1;
     Nodecolor.Color := clrred;
     Nodecolor.Alpha := 0.1;
@@ -1214,7 +1204,7 @@ begin
   with FUIRotateLineY do
   begin
     Options := [loUseNodeColorForLines];
-    //Äëÿ èñïðàâëåíèÿ ïðîáëåì ñ ïðîçðà÷íîñòüþ
+    // To fix transparency issues
     lineColor.Alpha := 0.1;
     Nodecolor.Color := clrLime;
     Nodecolor.Alpha := 0.1;
@@ -1298,7 +1288,7 @@ begin
   with FUIRotateLineZ do
   begin
     Options := [loUseNodeColorForLines];
-    //to correct transparency problem
+    // to correct transparency problem
     lineColor.Alpha := 0.1;
     Nodecolor.Color := clrBlue;
     Nodecolor.Alpha := 0.1;
@@ -2949,7 +2939,6 @@ begin
   end;
 end;
 
-
 procedure TGLGizmoEx.Loaded;
 begin
   inherited;
@@ -3598,7 +3587,6 @@ var
     for I := 0 to FSelectedObjects.Count - 1 do
       with FSelectedObjects do
       begin
-
         case Ord(FReferenceCoordSystem) of
           0: v := FUIRootHelpers.AbsolutePosition;
           1: v := TGLBaseSceneObject(Hit[I]).AbsolutePosition;
@@ -3826,10 +3814,8 @@ var
   end;
 
 begin
-
   if (not Enabled) or (RootGizmo = nil) or (RootObjects = nil) then
     Exit;
-
   if not FShowMultiSelecting then
   begin
 
@@ -3911,13 +3897,10 @@ begin
      not Assigned(RootObjects) or
      not Assigned(Viewer)      then
     Exit;
-
   mx := X;
   my := Y;
-
   pick := InternalGetPickedObjects(X - 1, Y - 1, X + 1, Y + 1);
   gotPick := False;
-
   for I := 0 to pick.Count - 1 do
     if (pick.Hit[I] is TGLGizmoExUIDisk) or
       (pick.Hit[I] is TGLGizmoExUISphere) or
@@ -4021,7 +4004,7 @@ begin
   if operation = gopNone then
   begin
     pick := InternalGetPickedObjects(X - 1, Y - 1, X + 1, Y + 1, 8);
-    //î÷èñòêà ñïèñêà åñëè êëèêíóëè â ïóñòîòó
+    // clearing the list if clicked into the void
     if not FCanAddObjToSelectionList and not FCanRemoveObjFromSelectionList and (pick.Count = 0) then
       ClearSelection;
 
@@ -4063,7 +4046,7 @@ begin
       OnUpdate(self);
 
     v := VectorMake(0, 0, 0);
-    //óñòàíàâëèâàåì ãèçìî â íóæíóþ ïîçèöèþ!
+    // set the gizmo to the right position!
     for  I := 0 to FSelectedObjects.Count - 1 do
       VectorAdd(v, TGLBaseSceneObject(FSelectedObjects.Hit[I]).AbsolutePosition, v);
 
@@ -4233,7 +4216,7 @@ begin
   UpdateGizmo;
 end;
 
-////////////////////////////////////////////////////////////
+//===========================================================================================
 
 procedure TGLGizmoExObjectItem.AssignFromObject(const AObject: TGLBaseSceneObject; AssignAndRemoveObj: Boolean = False);
 begin
@@ -4329,7 +4312,9 @@ begin
   FOldMatrix := Value;
 end;
 
-{ TGLGizmoExUndoCollection }
+//==================================
+//     TGLGizmoExUndoCollection
+//=================================
 
 function TGLGizmoExObjectCollection.Add: TGLGizmoExObjectItem;
 begin
@@ -4377,7 +4362,7 @@ begin
     GetItems(I).DoUndo;
 end;
 
-/////////////////////////////////////////////////////////////
+//==================================================================
 
 constructor TGLGizmoExActionHistoryItem.Create(AOwner: TCollection);
 begin
@@ -4403,7 +4388,9 @@ begin
     FGizmoObjectCollection := aValue;
 end;
 
-{ TGLGizmoExUndoCollection }
+//=======================================
+//      TGLGizmoExUndoCollection
+//=======================================
 
 constructor TGLGizmoExActionHistoryCollection.Create(AOwner: TPersistent; ItemClass: TCollectionItemClass);
 begin

+ 4 - 3
Source/GLS.Graph.pas → Source/VCL/GLS.Graph.pas

@@ -16,17 +16,18 @@ uses
   
   GLS.Scene,
   Scena.OpenGLTokens,
+  Scena.VectorTypes,
+  Scena.VectorGeometry,
+
   GLS.Context,
   GLS.XOpenGL,
-  Scena.VectorGeometry,
   GLS.Material,
   GLS.Objects,
   GLS.VectorLists,
   GLS.Color,
   GLS.BaseClasses,
   GLS.RenderContextInfo,
-  GLS.State,
-  Scena.VectorTypes;
+  GLS.State;
 
 type
 

+ 4 - 3
Source/GLS.Graphics.pas → Source/VCL/GLS.Graphics.pas

@@ -32,16 +32,17 @@ uses
 
   Scena.OpenGLTokens,
   Scena.VectorTypes,
+  Scena.TextureFormat,
+  Scena.VectorGeometry,
+  Scena.Strings,
+
   GLS.State,
   GLS.ApplicationFileIO,
   GLS.PersistentClasses,
   GLS.Context,
   GLS.ImageUtils,
   GLS.Color,
-  Scena.TextureFormat,
-  Scena.VectorGeometry,
   GLS.Utils,
-  Scena.Strings,
   Scena.Logger;
 
 {$DEFINE PRF_HACK_PASSES}

+ 2 - 1
Source/GLS.Gui.pas → Source/VCL/GLS.Gui.pas

@@ -17,12 +17,13 @@ uses
 
   Scena.OpenGLTokens,
   Scena.VectorTypes,
+  Scena.VectorGeometry,
+
   GLS.Scene,
   GLS.BitmapFont,
   GLS.Material,
   GLS.Context,
   GLS.PersistentClasses,
-  Scena.VectorGeometry,
   GLS.Coordinates,
   GLS.BaseClasses;
 

+ 2 - 3
Source/GLS.HeightData.pas → Source/VCL/GLS.HeightData.pas

@@ -28,9 +28,9 @@ uses
   System.Types,
   Vcl.Graphics,
 
+  Scena.VectorGeometry,
   GLS.ApplicationFileIO,
   GLS.Utils,
-  Scena.VectorGeometry,
   GLS.Material,
   GLS.BaseClasses;
 
@@ -40,8 +40,7 @@ type
   PByteRaster = ^TByteRaster;
   TSmallintArray = array [0 .. MaxInt div (2 * SizeOf(SmallInt))] of SmallInt;
   PSmallIntArray = ^TSmallintArray;
-  TSmallIntRaster = array [0 .. MaxInt div (2 * SizeOf(Pointer))
-    ] of PSmallIntArray;
+  TSmallIntRaster = array [0 .. MaxInt div (2 * SizeOf(Pointer))] of PSmallIntArray;
   PSmallIntRaster = ^TSmallIntRaster;
   TSingleRaster = array [0 .. MaxInt div (2 * SizeOf(Pointer))] of PSingleArray;
   PSingleRaster = ^TSingleRaster;

+ 2 - 2
Source/VCL/GLS.InitOpenGL.pas

@@ -12,8 +12,8 @@ uses
   Winapi.OpenGL,
   Winapi.OpenGLext,
   Winapi.Windows,
-  System.SysUtils,
-  Vcl.Forms;
+  Vcl.Forms,
+  System.SysUtils;
 
 type
   TGLOpenGL = class

+ 0 - 2
Source/GLS.Memo.pas → Source/VCL/GLS.Memo.pas

@@ -23,8 +23,6 @@ uses
   VCL.StdCtrls, 
   VCL.ExtCtrls;
 
-
-
 type
   TBorderType = (btRaised, btLowered, btFlatRaised, btFlatLowered);
   TCommand = Integer;

+ 0 - 0
Source/GLS.ObjectManager.pas → Source/VCL/GLS.ObjectManager.pas


+ 3 - 2
Source/GLS.Objects.pas → Source/VCL/GLS.Objects.pas

@@ -31,11 +31,12 @@ uses
   Scena.OpenGLTokens,
   Scena.OpenGLAdapter,
   Scena.VectorTypes,
-  GLS.VectorLists,
+  Scena.PipelineTransformation,
   Scena.VectorGeometry,
   Scena.Spline,
+
+  GLS.VectorLists,
   GLS.Scene,
-  Scena.PipelineTransformation,
   GLS.Context,
   GLS.Silhouette,
   GLS.Color,

+ 0 - 0
Source/GLS.Scene.pas → Source/VCL/GLS.Scene.pas


+ 0 - 1
Source/GLS.SceneForm.pas → Source/VCL/GLS.SceneForm.pas

@@ -1,7 +1,6 @@
 //
 // The graphics platform GLScene https://github.com/glscene
 //
-
 unit GLS.SceneForm;
 
 (*  GLScene form loader *)

+ 0 - 0
Source/GLS.SceneViewer.pas → Source/VCL/GLS.SceneViewer.pas


+ 0 - 0
Source/GLS.Screen.pas → Source/VCL/GLS.Screen.pas


+ 40 - 36
Source/GLS.SkyDome.pas → Source/VCL/GLS.SkyDome.pas

@@ -3,7 +3,7 @@
 //
 unit GLS.SkyDome;
 
-(* Skydome object *)
+(* Skydome object with celestial grids *)
 
 interface
 
@@ -38,8 +38,7 @@ type
 
 // ------------------------- SkyBox class -------------------------
 
-  TGLSkyBoxStyle = (sbsFull, sbsTopHalf, sbsBottomHalf, sbTopTwoThirds,
-    sbsTopHalfClamped);
+  TGLSkyBoxStyle = (sbsFull, sbsTopHalf, sbsBottomHalf, sbTopTwoThirds, sbsTopHalfClamped);
 
   TGLSkyBox = class(TGLCameraInvariantObject, IGLMaterialLibrarySupported)
   private
@@ -77,26 +76,16 @@ type
     procedure Notification(AComponent: TComponent; Operation: TOperation);
       override;
   published
-    property MaterialLibrary: TGLMaterialLibrary read FMaterialLibrary write
-      SetMaterialLibrary;
-    property MatNameTop: TGLLibMaterialName read FMatNameTop write
-      SetMatNameTop;
-    property MatNameBottom: TGLLibMaterialName read FMatNameBottom write
-      SetMatNameBottom;
-    property MatNameLeft: TGLLibMaterialName read FMatNameLeft write
-      SetMatNameLeft;
-    property MatNameRight: TGLLibMaterialName read FMatNameRight write
-      SetMatNameRight;
-    property MatNameFront: TGLLibMaterialName read FMatNameFront write
-      SetMatNameFront;
-    property MatNameBack: TGLLibMaterialName read FMatNameBack write
-      SetMatNameBack;
-    property MatNameClouds: TGLLibMaterialName read FMatNameClouds write
-      SetMatNameClouds;
-    property CloudsPlaneOffset: Single read FCloudsPlaneOffset write
-      SetCloudsPlaneOffset;
-    property CloudsPlaneSize: Single read FCloudsPlaneSize write
-      SetCloudsPlaneSize;
+    property MaterialLibrary: TGLMaterialLibrary read FMaterialLibrary write SetMaterialLibrary;
+    property MatNameTop: TGLLibMaterialName read FMatNameTop write SetMatNameTop;
+    property MatNameBottom: TGLLibMaterialName read FMatNameBottom write SetMatNameBottom;
+    property MatNameLeft: TGLLibMaterialName read FMatNameLeft write SetMatNameLeft;
+    property MatNameRight: TGLLibMaterialName read FMatNameRight write SetMatNameRight;
+    property MatNameFront: TGLLibMaterialName read FMatNameFront write SetMatNameFront;
+    property MatNameBack: TGLLibMaterialName read FMatNameBack write SetMatNameBack;
+    property MatNameClouds: TGLLibMaterialName read FMatNameClouds write SetMatNameClouds;
+    property CloudsPlaneOffset: Single read FCloudsPlaneOffset write SetCloudsPlaneOffset;
+    property CloudsPlaneSize: Single read FCloudsPlaneSize write SetCloudsPlaneSize;
     property Style: TGLSkyBoxStyle read FStyle write FStyle default sbsFull;
   end;
 
@@ -143,8 +132,7 @@ type
     constructor Create(AOwner: TComponent);
     function Add: TGLSkyDomeBand;
     function FindItemID(ID: Integer): TGLSkyDomeBand;
-    property Items[index: Integer]: TGLSkyDomeBand read GetItems write SetItems;
-    default;
+    property Items[index: Integer]: TGLSkyDomeBand read GetItems write SetItems; default;
     procedure NotifyChange;
     procedure BuildList(var rci: TGLRenderContextInfo);
   end;
@@ -183,8 +171,7 @@ type
     constructor Create(AOwner: TComponent);
     function Add: TGLSkyDomeStar;
     function FindItemID(ID: Integer): TGLSkyDomeStar;
-    property Items[index: Integer]: TGLSkyDomeStar read GetItems write SetItems;
-    default;
+    property Items[index: Integer]: TGLSkyDomeStar read GetItems write SetItems; default;
     procedure BuildList(var rci: TGLRenderContextInfo; twinkle: Boolean);
     (* Adds nb random stars of the given color.
       Stars are homogenously scattered on the complete sphere, not only the band defined or visible dome. *)
@@ -196,7 +183,7 @@ type
     procedure LoadStarsFile(const starsFileName: string);
   end;
 
-  TGLSkyDomeOption = (sdoTwinkle);
+  TGLSkyDomeOption = (sdoEquatorialGrid, sdoEclipticGrid, sdoGalacticGrid, sdoSupergalacticGrid, sdoTwinkle);
   TGLSkyDomeOptions = set of TGLSkyDomeOption;
 
   (* Renders a sky dome always centered on the camera.
@@ -225,13 +212,12 @@ type
     property Options: TGLSkyDomeOptions read FOptions write SetOptions default [];
   end;
 
-  TEarthSkydomeOption = (esoFadeStarsWithSun, esoRotateOnTwelveHours, esoDepthTest);
-  TEarthSkydomeOptions = set of TEarthSkydomeOption;
+  TGLEarthSkydomeOption = (esoFadeStarsWithSun, esoRotateOnTwelveHours, esoDepthTest);
+  TGLEarthSkydomeOptions = set of TGLEarthSkydomeOption;
 
   (* Render a skydome like what can be seen on earth.
      Color is based on sun position and turbidity, to "mimic" atmospheric
-     Rayleigh and Mie scatterings. The colors can be adjusted to render
-     weird/exoplanet atmospheres too.
+     Rayleigh and Mie scatterings. The colors can be adjusted to render exoplanet atmospheres too.
      The default slices/stacks values make for an average quality rendering,
      for a very clean rendering, use 64/64 (more is overkill in most cases).
      The complexity is quite high though, making a T&L 3D board a necessity
@@ -249,7 +235,7 @@ type
     FNightColor: TGLColor;
     FDeepColor: TGLColor;
     FSlices, FStacks: Integer;
-    FExtendedOptions: TEarthSkydomeOptions;
+    FExtendedOptions: TGLEarthSkydomeOptions;
     FMorning: boolean;
   protected
     procedure Loaded; override;
@@ -276,7 +262,7 @@ type
   published
     // Elevation of the sun, measured in degrees
     property SunElevation: Single read FSunElevation write SetSunElevation;
-    // Expresses the purity of air.  Value range is from 1 (pure athmosphere) to 120 (very nebulous)
+    // Expresses the purity of air. Value range is from 1 (pure athmosphere) to 120 (very nebulous)
     property Turbidity: Single read FTurbidity write SetTurbidity;
     property SunZenithColor: TGLColor read FSunZenithColor write SetSunZenithColor;
     property SunDawnColor: TGLColor read FSunDawnColor write SetSunDawnColor;
@@ -284,7 +270,7 @@ type
     property SkyColor: TGLColor read FSkyColor write SetSkyColor;
     property NightColor: TGLColor read FNightColor write SetNightColor;
     property DeepColor: TGLColor read FDeepColor write SetDeepColor;
-    property ExtendedOptions: TEarthSkydomeOptions read FExtendedOptions write FExtendedOptions;
+    property ExtendedOptions: TGLEarthSkydomeOptions read FExtendedOptions write FExtendedOptions;
     property Slices: Integer read FSlices write SetSlices default 24;
     property Stacks: Integer read FStacks write SetStacks default 48;
   end;
@@ -1224,12 +1210,30 @@ begin
   StructureChanged;
 end;
 
+//--------- Options to draw grids and twinkle stars --------
+
 procedure TGLSkyDome.SetOptions(const val: TGLSkyDomeOptions);
 begin
   if val <> FOptions then
   begin
     FOptions := val;
-    if sdoTwinkle in FOptions then
+    if sdoEquatorialGrid in FOptions then
+    begin
+      // DrawEquatorialGrid();
+    end
+    else if sdoEclipticGrid in FOptions then
+    begin
+      // DrawEclipticGrid();
+    end
+    else if sdoGalacticGrid in FOptions then
+    begin
+      // DrawGalacticGrid();
+    end
+    else if sdoSupergalacticGrid in FOptions then
+    begin
+      // DrawGalacticGrid();
+    end
+    else if sdoTwinkle in FOptions then
       ObjectStyle := ObjectStyle + [osDirectDraw]
     else
     begin

+ 7 - 6
Source/GLS.SmartObjects.pas → Source/VCL/GLS.SmartObjects.pas

@@ -5,8 +5,8 @@ unit GLS.SmartObjects;
 
 (*
   The smart spatial objects that have sences and artifitial intelligence
-  to interact with player, base geometric and other smart objects of GLScene:
-  TGLGerm, TGLSmartCells, TGLSmartSwarm, TGLCyborg, TGLCyborgNet
+  to interact with player, base geometric and other smart objects:
+  TGLGerm, TGLSmartCells, TGLSmartSwarm, TGLSmartNet, TGLCyborg, TGLCyborgs
 *)
 
 interface
@@ -23,24 +23,25 @@ uses
   VCL.Consts,
 
   Scena.OpenGLTokens,
-  GLS.Scene,
   Scena.VectorGeometry,
   Scena.VectorTypes,
   Scena.VectorTypesExt,
+  Scena.Strings,
+  Scena.PipelineTransformation,
+  Scena.Logger,
+
+  GLS.Scene,
   GLS.VectorLists,
   GLS.PersistentClasses,
   GLS.Silhouette,
-  Scena.Strings,
   GLS.Texture,
   GLS.Material,
   GLS.Mesh,
-  Scena.Logger,
   GLS.Octree,
   GLS.GeometryBB,
   GLS.ApplicationFileIO,
   GLS.Context,
   GLS.Color,
-  Scena.PipelineTransformation,
   GLS.Selection,
   GLS.RenderContextInfo,
   GLS.Coordinates,