public void export_to_obj(string filename)
        {
            if (has_vertices() == false)
            {
                System.Windows.Forms.MessageBox.Show("No hay grafica para exportar.");
                return;
            }

            System.IO.StreamWriter writer = new System.IO.StreamWriter(filename);

            string buffer;

            // escribir encabezado
            writer.WriteLine("g laser_data_mesh");

            MeshBuffer mbuffer = get_mesh_buffer();

            // Escribir las coordenadas
            for (uint i = 0; i < mbuffer.VertexCount; i++)
            {
                Vertex3D vert = mbuffer.GetVertex(i);
                buffer = "v " + vert.Position.X.ToString() + " " + vert.Position.Y.ToString() + " " + vert.Position.Z.ToString();
                writer.WriteLine(buffer);
            }


            // Escribir las normales
            for (uint i = 0; i < mbuffer.VertexCount; i++)
            {
                Vertex3D vert = mbuffer.GetVertex(i);
                buffer = "vn " + vert.Normal.X.ToString() + " " + vert.Normal.Y.ToString() + " " + vert.Normal.Z.ToString();
                writer.WriteLine(buffer);
            }

            // Escribir los indices
            for (uint i = 0; i < mbuffer.IndexCount / 3; i++)
            {
                string i0 = (mbuffer.GetIndex(i * 3) + 1).ToString();
                string i1 = (mbuffer.GetIndex(i * 3 + 1) + 1).ToString();
                string i2 = (mbuffer.GetIndex(i * 3 + 2) + 1).ToString();

                buffer = "f " + i0 + "//" + i0 + " " + i1 + "//" + i1 + " " + i2 + "//" + i2;
                writer.WriteLine(buffer);
            }

            writer.Close();
            writer = null;
        }
        public void export_to_vrml(string filename)
        {
            if (has_vertices() == false)
            {
                System.Windows.Forms.MessageBox.Show("No hay grafica para exportar.");
                return;
            }

            System.IO.StreamWriter writer = new System.IO.StreamWriter(filename);

            // escribir encabezado
            writer.WriteLine("DEF laser_data_node Transform {");

            string buffer = "translation 0 0 0";

            writer.WriteLine(buffer);
            buffer = "rotation 1.0 0 0 0";
            writer.WriteLine(buffer);
            buffer = "scale 1.0 1.0 1.0";
            writer.WriteLine(buffer);
            buffer = "children [";
            writer.WriteLine(buffer);
            buffer = "DEF laser_data_mesh Group {";
            writer.WriteLine(buffer);
            buffer = "children [";
            writer.WriteLine(buffer);
            buffer = "Shape {";
            writer.WriteLine(buffer);
            buffer = "appearance Appearance {}";
            writer.WriteLine(buffer);
            buffer = "geometry IndexedFaceSet {";
            writer.WriteLine(buffer);
            buffer = "solid TRUE";
            writer.WriteLine(buffer);
            buffer = "coord DEF coord_Tube Coordinate {";
            writer.WriteLine(buffer);
            buffer = "point [";
            writer.WriteLine(buffer);
            // Escribir las coordenadas
            MeshBuffer mbuffer = get_mesh_buffer();

            for (uint i = 0; i < mbuffer.VertexCount; i++)
            {
                Vertex3D vert = mbuffer.GetVertex(i);
                buffer = vert.Position.X.ToString() + " " + vert.Position.Y.ToString() + " " + vert.Position.Z.ToString();
                writer.WriteLine(buffer);
            }


            buffer = "] } coordIndex [";
            writer.WriteLine(buffer);

            // Escribir los indices
            for (uint i = 0; i < mbuffer.IndexCount / 3; i++)
            {
                ushort i0 = mbuffer.GetIndex(i * 3);
                ushort i1 = mbuffer.GetIndex(i * 3 + 1);
                ushort i2 = mbuffer.GetIndex(i * 3 + 2);

                buffer = i0.ToString() + " " + i1.ToString() + " " + i2.ToString() + " " + i.ToString() + " " + "-1";
                writer.WriteLine(buffer);
            }


            buffer = "]	} } ] } ] }";
            writer.WriteLine(buffer);
            writer.Close();
            writer = null;
        }