142 lines
4.2 KiB
Ada
142 lines
4.2 KiB
Ada
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;
|