Example #1
0
        public UInt32 createTriangleMesh(
            Tuple <double, double, double>[] P,
            Tuple <UInt32, UInt32, UInt32>[] PI,
            Tuple <double, double, double>[] N,
            Tuple <UInt32, UInt32, UInt32>[] NI)
        {
            if (PI.Length != NI.Length)
            {
                throw new InvalidOperationException();
            }

            var tess     = new PRC3DTess();
            var tessFace = new PRCTessFace();

            tessFace.used_entities_flag = PRCTessFace.PRC_FACETESSDATA_Triangle;
            tessFace.number_of_texture_coordinate_indexes = 0;

            foreach (var p in P)
            {
                tess.coordinates.Add(p.Item1);
                tess.coordinates.Add(p.Item2);
                tess.coordinates.Add(p.Item3);
            }

            foreach (var p in N)
            {
                tess.normal_coordinate.Add(p.Item1);
                tess.normal_coordinate.Add(p.Item2);
                tess.normal_coordinate.Add(p.Item3);
            }

            for (int i = 0; i < PI.Length; i++)
            {
                tess.triangulated_index.Add(3 * NI[i].Item1);
                tess.triangulated_index.Add(3 * PI[i].Item1);

                tess.triangulated_index.Add(3 * NI[i].Item2);
                tess.triangulated_index.Add(3 * PI[i].Item2);

                tess.triangulated_index.Add(3 * NI[i].Item3);
                tess.triangulated_index.Add(3 * PI[i].Item3);
            }

            tessFace.sizes_triangulated.Add((UInt32)PI.Length);
            tess.face_tessellation.Add(tessFace);
            _tessellations.Add(tess);

            return((UInt32)(_tessellations.Count - 1));
        }
Example #2
0
        private void SerializeContent3DTess(PRC3DTess t)
        {
            SerializeContentBaseTessData(t);

            WriteBool(t.has_faces);
            WriteBool(t.has_loops);
            WriteBool(false); //must recalculate normals
            WriteDoubleList(t.normal_coordinate);
            WriteUInt32List(t.wire_index);
            WriteUInt32List(t.triangulated_index);

            WriteUint32((UInt32)t.face_tessellation.Count);
            foreach (var face in t.face_tessellation)
            {
                SerializeContentTessFace(face);
            }

            WriteDoubleList(t.texture_coordinate);
        }
Example #3
0
 public void Serialize3DTess(PRC3DTess t)
 {
     WriteUint32(PRCType.PRC_TYPE_TESS_3D);
     SerializeContent3DTess(t);
 }