Пример #1
0
        private void reloadMesh(BXDAEditorNode meshNode)
        {
            foreach (BXDAEditorNode visualSubMeshNode in meshNode.Nodes[0].Nodes) //Visual Sub-meshes
            {
                reloadSubMesh(visualSubMeshNode);
            }

            foreach (BXDAEditorNode collisionSubMeshNode in meshNode.Nodes[1].Nodes) //Collision Sub-meshes
            {
                reloadSubMesh(collisionSubMeshNode);
            }

            BXDAMesh mesh = (BXDAMesh)meshNode.data[0];

            //Physical properties
            float mass = (float)((BXDAEditorNode)meshNode.Nodes[2].Nodes[0]).data[0];

            if (_units.Equals("lb"))
            {
                mesh.physics.mass = mass / 2.205f;
            }
            else
            {
                mesh.physics.mass = mass;
            }
            mesh.physics.centerOfMass.x = (float)((BXDAEditorNode)meshNode.Nodes[2].Nodes[1]).data[0];
            mesh.physics.centerOfMass.y = (float)((BXDAEditorNode)meshNode.Nodes[2].Nodes[1]).data[1];
            mesh.physics.centerOfMass.z = (float)((BXDAEditorNode)meshNode.Nodes[2].Nodes[1]).data[2];
        }
Пример #2
0
        /// <summary>
        /// Generates a tree from a bxda file
        /// </summary>
        /// <param name="meshPath">The path to the .bxda file</param>
        /// <returns>The root node of the mesh tree</returns>
        private BXDAEditorNode GenerateTree(BXDAMesh mesh)
        {
            BXDAEditorNode meshNode = new BXDAEditorNode(BXDAEditorNode.NodeType.MESH, false, mesh);

            BXDAEditorNode visualSectionHeader = new BXDAEditorNode("Visual Sub-meshes", BXDAEditorNode.NodeType.INTEGER, false,
                                                                    mesh.meshes.Count);

            meshNode.Nodes.Add(visualSectionHeader);
            generateSubMeshTree(visualSectionHeader, mesh.meshes);

            BXDAEditorNode collisionSectionHeader = new BXDAEditorNode("Collision Sub-meshes", BXDAEditorNode.NodeType.INTEGER, false,
                                                                       mesh.colliders.Count);

            meshNode.Nodes.Add(collisionSectionHeader);
            generateSubMeshTree(collisionSectionHeader, mesh.colliders);

            BXDAEditorNode physicsSectionHeader = new BXDAEditorNode(String.Format("Physical Properties ({0}, cm)", _units),
                                                                     BXDAEditorNode.NodeType.SECTION_HEADER, false);

            meshNode.Nodes.Add(physicsSectionHeader);

            physicsSectionHeader.Nodes.Add(new BXDAEditorNode("Total Mass", BXDAEditorNode.NodeType.FLOAT, true,
                                                              _units.Equals("lb") ? mesh.physics.mass * 2.205f : mesh.physics.mass));
            physicsSectionHeader.Nodes.Add(new BXDAEditorNode("Center of Mass", BXDAEditorNode.NodeType.VECTOR3, true,
                                                              mesh.physics.centerOfMass.x, mesh.physics.centerOfMass.y, mesh.physics.centerOfMass.z));

            return(meshNode);
        }
Пример #3
0
        /// <summary>
        /// Generate a tree of Sub-meshes from a list (Mostly for code niceness)
        /// </summary>
        /// <param name="subMeshes">A list of submeshes (Either visual or collision)</param>
        /// <returns>A blank node with the generated tree of Sub-meshes under it</returns>
        private void generateSubMeshTree(BXDAEditorNode root, List <BXDAMesh.BXDASubMesh> subMeshes)
        {
            //Sub-meshes
            foreach (BXDAMesh.BXDASubMesh subMesh in subMeshes)
            {
                BXDAEditorNode subMeshNode = new BXDAEditorNode(BXDAEditorNode.NodeType.SUBMESH, false, subMesh);
                root.Nodes.Add(subMeshNode);

                //Vertices
                BXDAEditorNode verticesSectionHeader = new BXDAEditorNode("Vertices", BXDAEditorNode.NodeType.INTEGER, false,
                                                                          subMesh.verts.Length);
                subMeshNode.Nodes.Add(verticesSectionHeader);

                //Vertex Normals
                if (subMesh.norms != null)
                {
                    BXDAEditorNode normalsSectionHeader = new BXDAEditorNode("Surface Normals", BXDAEditorNode.NodeType.INTEGER, false,
                                                                             subMesh.norms.Length);
                    subMeshNode.Nodes.Add(normalsSectionHeader);
                }

                //Surfaces
                BXDAEditorNode surfacesSectionHeader = new BXDAEditorNode("Surfaces", BXDAEditorNode.NodeType.INTEGER, false,
                                                                          subMesh.surfaces.Count);
                subMeshNode.Nodes.Add(surfacesSectionHeader);

                foreach (BXDAMesh.BXDASurface surface in subMesh.surfaces)
                {
                    BXDAEditorNode surfaceNode = new BXDAEditorNode(BXDAEditorNode.NodeType.SURFACE, false, surface);
                    surfacesSectionHeader.Nodes.Add(surfaceNode);

                    //Material Properties
                    BXDAEditorNode materialSectionHeader = new BXDAEditorNode("Material Properties", BXDAEditorNode.NodeType.SECTION_HEADER,
                                                                              false);
                    surfaceNode.Nodes.Add(materialSectionHeader);

                    materialSectionHeader.Nodes.Add(new BXDAEditorNode("Color", BXDAEditorNode.NodeType.COLOR,
                                                                       true, surface.color, surface.hasColor));
                    materialSectionHeader.Nodes.Add(new BXDAEditorNode("Transparency", BXDAEditorNode.NodeType.FLOAT, true,
                                                                       surface.transparency));
                    materialSectionHeader.Nodes.Add(new BXDAEditorNode("Translucency", BXDAEditorNode.NodeType.FLOAT, true,
                                                                       surface.translucency));
                    materialSectionHeader.Nodes.Add(new BXDAEditorNode("Specular Intensity", BXDAEditorNode.NodeType.FLOAT, true,
                                                                       surface.specular));

                    //Indices
                    BXDAEditorNode indicesSectionHeader = new BXDAEditorNode("Indices", BXDAEditorNode.NodeType.INTEGER, false,
                                                                             surface.indicies.Length);
                    surfaceNode.Nodes.Add(indicesSectionHeader);
                }
            }
        }
Пример #4
0
        /// <summary>
        /// Occurs after a node is double clicked
        /// </summary>
        /// <param name="sender">Not used</param>
        /// <param name="e">Not used</param>
        private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            BXDAEditorNode selectedNode = (BXDAEditorNode)treeView1.SelectedNode;

            if (selectedNode != null && selectedNode.isEditable)
            {
                BXDAEditorForm editForm = new BXDAEditorForm(selectedNode);
                if (editForm.ShowDialog(this) == DialogResult.OK)
                {
                    reloadModel();
                }
            }
        }
Пример #5
0
        private void reloadSubMesh(BXDAEditorNode subMeshNode)
        {
            foreach (BXDAEditorNode surfaceNode in subMeshNode.LastNode.Nodes)
            {
                BXDAMesh.BXDASurface surface      = (BXDAMesh.BXDASurface)surfaceNode.data[0];
                BXDAEditorNode       materialNode = (BXDAEditorNode)surfaceNode.Nodes[0];

                surface.hasColor     = (bool)((BXDAEditorNode)materialNode.Nodes[0]).data[1];
                surface.color        = (uint)((BXDAEditorNode)materialNode.Nodes[0]).data[0];
                surface.transparency = (float)((BXDAEditorNode)materialNode.Nodes[1]).data[0];
                surface.translucency = (float)((BXDAEditorNode)materialNode.Nodes[2]).data[0];
                surface.specular     = (float)((BXDAEditorNode)materialNode.Nodes[3]).data[0];
            }
        }
Пример #6
0
        public void loadModel(List <BXDAMesh> meshes)
        {
            treeView1.Nodes.Clear();

            if (meshes == null)
            {
                return;
            }

            rootNode = new BXDAEditorNode("Model", BXDAEditorNode.NodeType.SECTION_HEADER, false);
            rootNode.Nodes.Add(new BXDAEditorNode("Exported with version", BXDAEditorNode.NodeType.STRING, false, BXDIO.ASSEMBLY_VERSION));
            foreach (BXDAMesh mesh in meshes)
            {
                rootNode.Nodes.Add(GenerateTree(mesh));
            }

            treeView1.Nodes.Add(rootNode);
        }