using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Collada141; using System.Runtime.InteropServices; using System.Diagnostics; using System.Globalization; using System.Xml; using ColladaHelper; using OpenTK; using Toolbox.Library.Rendering; namespace Toolbox.Library { public class DAE : DAEHelper { public List objects = new List(); public List materials = new List(); public STSkeleton skeleton; public List BoneNames = new List(); public bool UseTransformMatrix = true; Dictionary VertexSkinSources = new Dictionary(); Dictionary MatrixSkinSources = new Dictionary(); private Matrix4 GlobalTransform = Matrix4.Identity; public bool LoadFile(string FileName) { GlobalTransform = Matrix4.Identity; COLLADA collada = COLLADA.Load(FileName); //Check axis up if (collada.asset != null) { switch (collada.asset.up_axis) { case UpAxisType.X_UP: GlobalTransform = Matrix4.CreateRotationX(90); break; case UpAxisType.Y_UP: GlobalTransform = Matrix4.CreateRotationY(90); break; case UpAxisType.Z_UP: GlobalTransform = Matrix4.CreateRotationZ(90); break; } if (collada.asset.unit != null) { var amount = collada.asset.unit.meter; var type = collada.asset.unit.name; if (type == "meter") { } else if (type == "centimeter") { } } } foreach (var item in collada.Items) { if (item is library_geometries) LoadGeometry((library_geometries)item); if (item is library_images) LoadImages((library_images)item); if (item is library_controllers) LoadControllers((library_controllers)item); if (item is library_nodes) LoadNodes((library_nodes)item); if (item is library_visual_scenes) LoadVisualScenes((library_visual_scenes)item); } return true; } private void LoadVisualScenes(library_visual_scenes nodes) { } private void LoadNodes(library_nodes nodes) { } private void LoadControllers(library_controllers controllers) { } private void LoadMaterials(library_materials materials) { } private void LoadImages(library_images images) { } private void LoadGeometry(library_geometries geometries) { foreach (var geom in geometries.geometry) { var mesh = geom.Item as mesh; if (mesh == null) continue; foreach (var source in mesh.source) { var float_array = source.Item as float_array; if (float_array == null) continue; Console.Write("Geometry {0} source {1} : ", geom.id, source.id); foreach (var mesh_source_value in float_array.Values) Console.Write("{0} ", mesh_source_value); Console.WriteLine(); } } } public bool ExportFile(string FileName, List meshes, STSkeleton skeleton = null) { return false; } private List CreateGenericObjects(string Name, library_geometries Geometries) { List objects = new List(); foreach (var geom in Geometries.geometry) { var daeMesh = geom.Item as mesh; if (daeMesh == null) continue; STGenericObject mesh = new STGenericObject(); mesh.ObjectName = Name; foreach (var source in daeMesh.source) { var float_array = source.Item as float_array; if (float_array == null) continue; } objects.Add(mesh); } return objects; } } }