Example #1
0
 /// <summary>
 /// Record CyclesMesh as new mesh data to commit to Cycles.
 /// </summary>
 /// <param name="me"></param>
 public void AddMesh(CyclesMesh me)
 {
     _cqMeshChanges[me.MeshId] = me;
 }
Example #2
0
 /// <summary>
 /// Record CyclesMesh as new mesh data to commit to Cycles.
 /// </summary>
 /// <param name="me"></param>
 public void AddMesh(CyclesMesh me)
 {
     _cqMeshChanges[me.MeshId] = me;
 }
Example #3
0
        public void HandleMeshData(Guid meshguid, int meshIndex, Rhino.Geometry.Mesh meshdata)
        {
            // Get face indices flattened to an
            // integer array.
            var findices = meshdata.Faces.ToIntArray(true);

            // Get texture coordinates and
            // flattens to a float array.
            var tc = meshdata.TextureCoordinates;
            var rhuv = tc.ToFloatArray();

            // Get rhino vertex normals and
            // flatten to a float array.
            var vn = meshdata.Normals;
            var rhvn = vn.ToFloatArray();

            // now convert UVs: from vertex indexed array to per face per vertex
            var cmuv = rhuv.Length > 0 ? new float[findices.Length * 2] : null;
            if (cmuv != null)
            {
                for (var fi = 0; fi < findices.Length; fi++)
                {
                    var fioffs = fi * 2;
                    var findex = findices[fi];
                    var findex2 = findex * 2;
                    var rhuvit = rhuv[findex2];
                    var rhuvit1 = rhuv[findex2 + 1];
                    cmuv[fioffs] = rhuvit;
                    cmuv[fioffs + 1] = rhuvit1;
                }
            }

            var meshid = new Tuple<Guid, int>(meshguid, meshIndex);

            var crc = _objectShaderDatabase.FindRenderHashForMeshId(meshid);
            if (crc == uint.MaxValue) crc = 0;

            // now we have everything we need
            // so we can create a CyclesMesh that the
            // RenderEngine can eventually commit to Cycles
            var cyclesMesh = new CyclesMesh
            {
                MeshId = meshid,
                verts = meshdata.Vertices.ToFloatArray(),
                faces = findices,
                uvs = cmuv,
                vertex_normals = rhvn,
                matid = crc
            };
            _objectDatabase.AddMesh(cyclesMesh);
        }