示例#1
0
        /// <summary>
        ///     Crear el mesh y cargarlo en la tabla
        /// </summary>
        private void meshCreate_Click(object sender, EventArgs e)
        {
            if (meshFilePath == null || meshFilePath.Equals(""))
            {
                return;
            }

            try
            {
                //Parsear XML de mesh
                var mediaPath = meshFilePath.Substring(0, meshFilePath.LastIndexOf('\\') + 1);
                var xmlString = File.ReadAllText(meshFilePath);
                var sceneData = parser.parseSceneFromString(xmlString);

                //Crear el mesh tantas veces como se haya pedido
                var cantidad   = (int)amountToCreate.Value;
                var initialPos = getInitialPos();
                for (var i = 0; i < cantidad; i++)
                {
                    var scene      = sceneLoader.loadScene(sceneData, mediaPath);
                    var radius     = scene.Meshes[0].BoundingBox.calculateBoxRadius();
                    var posOffsetX = radius * 2;

                    //cargar meshes en dataGrid
                    foreach (var mesh in scene.Meshes)
                    {
                        var mo = new SceneEditorMeshObject();
                        mo.mesh = mesh;
                        mo.mesh.AutoTransformEnable = true;
                        mo.name       = mesh.Name + meshCounter++;
                        mo.userInfo   = "";
                        mo.index      = MeshObjects.Count;
                        mo.fileName   = fileName.Text;
                        mo.groupIndex = meshGroupCounter;
                        mo.folderName = meshFolderName;

                        //Mover mesh a la posicion correcta
                        mesh.Position = new TGCVector3(initialPos.X + i * posOffsetX, initialPos.Y, initialPos.Z);

                        MeshObjects.Add(mo);
                        dataGridMeshList.Rows.Add(dataGridMeshList.Rows.Count + 1, meshGroupCounter, mo.name);
                    }

                    meshGroupCounter++;
                }

                //seleccionar el primer mesh en la grilla
                seleccionarPrimerElementoDataGrid();

                //pasar a modo camara con edicion de mesh
                radioButtonCameraMode.Checked = true;
                tabControl.SelectedTab        = tabControl.TabPages["tabPageModify"];
            }
            catch (Exception ex)
            {
                MessageBox.Show("Hubo un error al cargar el archivo " + fileName.Text, "Error al cargar Mesh",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                Debug.Write("Error al cargar Mesh de TGC " + ex.Message);
            }
        }
示例#2
0
 /// <summary>
 ///     Informa si un objeto esta actualmente seleccionado
 /// </summary>
 private bool isMeshObjectSelected(SceneEditorMeshObject meshObj)
 {
     foreach (var selectMeshObj in SelectedMeshList)
     {
         if (selectMeshObj == meshObj)
         {
             return(true);
         }
     }
     return(false);
 }
示例#3
0
        /// <summary>
        ///     Hacer picking y seleccionar modelo si hay colision
        /// </summary>
        private void findSelectedMeshWithPicking()
        {
            pickingRay.updateRay();
            TGCVector3 collisionP;

            //Hacer picking sobre todos los modelos y quedarse con el mas cerca
            var minDistance = float.MaxValue;
            SceneEditorMeshObject collisionMeshObj = null;

            foreach (var meshObj in MeshObjects)
            {
                if (!meshObj.visible)
                {
                    continue;
                }

                //Si ya está seleccionado ignorar
                if (isMeshObjectSelected(meshObj))
                {
                    continue;
                }

                var aabb   = meshObj.mesh.BoundingBox;
                var result = TgcCollisionUtils.intersectRayAABB(pickingRay.Ray, aabb, out collisionP);
                if (result)
                {
                    var lengthSq = TGCVector3.Subtract(collisionP, pickingRay.Ray.Origin).LengthSq();
                    if (lengthSq < minDistance)
                    {
                        minDistance      = lengthSq;
                        collisionMeshObj = meshObj;
                    }
                }
            }

            //Seleccionar objeto
            if (collisionMeshObj != null)
            {
                //Deseleccionar todo
                for (var i = 0; i < dataGridMeshList.Rows.Count; i++)
                {
                    dataGridMeshList.Rows[i].Selected = false;
                }

                //Seleccionar objeto del dataGrid
                dataGridMeshList.Rows[collisionMeshObj.index].Selected = true;
                dataGridMeshList_RowEnter(null, null);
            }
        }
示例#4
0
        /// <summary>
        ///     Actualizar valores de edicion de mesh de la interfaz
        /// </summary>
        private void updateEditMeshValues(SceneEditorMeshObject meshObj)
        {
            meshName.Text = meshObj.name;

            var pos = meshObj.mesh.Position;

            meshPosX.Text = pos.X.ToString();
            meshPosY.Text = pos.Y.ToString();
            meshPosZ.Text = pos.Z.ToString();

            var rot = meshObj.mesh.Rotation;

            meshRotX.Text = rot.X.ToString();
            meshRotY.Text = rot.Y.ToString();
            meshRotZ.Text = rot.Z.ToString();

            var scale = meshObj.mesh.Scale;

            meshScaleX.Text = scale.X.ToString();
            meshScaleY.Text = scale.Y.ToString();
            meshScaleZ.Text = scale.Z.ToString();

            userInfo.Text = meshObj.userInfo;
        }
示例#5
0
 /// <summary>
 ///     Seleccionar objeto
 /// </summary>
 private void selectMeshObject(SceneEditorMeshObject selectedMeshObj)
 {
     //Cargar valores del panel de edicion
     updateEditMeshValues(selectedMeshObj);
     enableEditMeshPanels(true);
 }