Add initial prototype.

This commit is contained in:
Rod Kay
2022-07-31 17:34:54 +10:00
commit 54a53b2ac0
1421 changed files with 358874 additions and 0 deletions

View File

@@ -0,0 +1,141 @@
package collada.Library.visual_scenes
--
-- Models a collada 'visual_scenes' library, which contains node/joint hierachy info.
--
is
------------
-- Transform
--
type transform_Kind is (Translate, Rotate, Scale, full_Transform);
type Transform (Kind : transform_Kind := transform_Kind'First) is
record
Sid : Text;
case Kind is
when Translate =>
Vector : Vector_3;
when Rotate =>
Axis : Vector_3;
Angle : math.Real;
when Scale =>
Scale : Vector_3;
when full_Transform =>
Matrix : Matrix_4x4;
end case;
end record;
type Transform_array is array (Positive range <>) of aliased Transform;
function to_Matrix (Self : in Transform) return collada.Matrix_4x4;
--------
--- Node
--
type Node is tagged private;
type Node_view is access all Node;
type Nodes is array (Positive range <>) of Node_view;
function Sid (Self : in Node) return Text;
function Id (Self : in Node) return Text;
function Name (Self : in Node) return Text;
procedure Sid_is (Self : in out Node; Now : in Text);
procedure Id_is (Self : in out Node; Now : in Text);
procedure Name_is (Self : in out Node; Now : in Text);
procedure add (Self : in out Node; the_Transform : in Transform);
function Transforms (Self : in Node) return Transform_array;
function fetch_Transform (Self : access Node; transform_Sid : in String) return access Transform;
function local_Transform (Self : in Node) return Matrix_4x4;
--
-- Returns the result of combining all 'Transforms'.
function global_Transform (Self : in Node) return Matrix_4x4;
--
-- Returns the result of combining 'local_Transform' with each ancestors 'local_Transform'.
function full_Transform (Self : in Node) return Matrix_4x4;
function Translation (Self : in Node) return Vector_3;
function Rotate_Z (Self : in Node) return Vector_4;
function Rotate_Y (Self : in Node) return Vector_4;
function Rotate_X (Self : in Node) return Vector_4;
function Scale (Self : in Node) return Vector_3;
procedure set_x_rotation_Angle (Self : in out Node; To : in math.Real);
procedure set_y_rotation_Angle (Self : in out Node; To : in math.Real);
procedure set_z_rotation_Angle (Self : in out Node; To : in math.Real);
procedure set_Location (Self : in out Node; To : in math.Vector_3);
procedure set_Location_x (Self : in out Node; To : in math.Real);
procedure set_Location_y (Self : in out Node; To : in math.Real);
procedure set_Location_z (Self : in out Node; To : in math.Real);
procedure set_Transform (Self : in out Node; To : in math.Matrix_4x4);
function Parent (Self : in Node) return Node_view;
procedure Parent_is (Self : in out Node; Now : Node_view);
function Children (Self : in Node) return Nodes;
function Child (Self : in Node; Which : in Positive) return Node_view;
function Child (Self : in Node; Named : in String ) return Node_view;
procedure add (Self : in out Node; the_Child : in Node_view);
Transform_not_found : exception;
----------------
--- visual_Scene
--
type visual_Scene is
record
Id : Text;
Name : Text;
root_Node : Node_view;
end record;
type visual_Scene_array is array (Positive range <>) of visual_Scene;
type visual_Scene_array_view is access visual_Scene_array;
----------------
--- Library Item
--
type Item is
record
Contents : visual_Scene_array_view;
skeletal_Root : Text;
end record;
private
type Transform_array_view is access all Transform_array;
type Nodes_view is access all Nodes;
type Node is tagged
record
Sid : Text;
Id : Text;
Name : Text;
Transforms : Transform_array_view;
Parent : Node_view;
Children : Nodes_view;
end record;
end collada.Library.visual_scenes;