示例#1
0
        /// <summary>
        /// Emit a Revit geometry Face object and
        /// return the number of resulting triangles.
        /// </summary>
        public int EmitFace(
            Face face,
            Color color,
            int shininess,
            int transparency)
        {
            Debug.Assert(0 <= shininess,
                         "expected non-negative shininess");

            Debug.Assert(128 >= shininess,
                         "expected shininess between 0 and 128");

            Debug.Assert(0 <= transparency,
                         "expected non-negative transparency");

            Debug.Assert(100 >= transparency,
                         "expected transparency between 0 and 100");

            Debug.Assert(100 * Math.Pow(2, 24) == 1677721600,
                         "expected shifted transparency to fit into a signed integer");

            Debug.Assert(1677721600 < int.MaxValue,
                         "expected transparency to fit into a signed integer");

            ++_faceCount;

            if (_add_color &&
                _color_transparency_lookup
                .AddColorTransparency(color,
                                      shininess, transparency))
            {
                StoreColorTransparency(color, transparency);
            }

            Mesh mesh = face.Triangulate();

            int n = mesh.NumTriangles;

            Debug.Print(" {0} mesh triangles", n);

            for (int i = 0; i < n; ++i)
            {
                ++_triangleCount;

                MeshTriangle t = mesh.get_Triangle(i);

                StoreTriangle(t);
            }
            return(n);
        }
示例#2
0
        /// <summary>
        /// Emit a Revit geometry Face object and
        /// return the number of resulting triangles.
        /// </summary>
        public int EmitFace(Element e, Face face, Color color, int transparency)
        {
            ++_faceCount;
            var objModel = new ObjModel()
            {
                UniqueId = e.UniqueId,
                Faces    = new List <VFace>(),
                vt       = new List <object>()
            };

            _objModels.Add(objModel);

            // 保存每个实体的材质颜色
            if (_add_color && _color_transparency_lookup.AddColorTransparency(color, transparency))
            {
                // 设置材质颜色id
                string name = ObjExportUtil.ColorTransparencyString(color, transparency);
                objModel.Mtl = name;
            }

            Mesh mesh = face.Triangulate(0 / 15.0);

            //Mesh mesh = face.Triangulate();

            #region 保存 Vertex 及 Triangle 数据

            int numTriangles = mesh.NumTriangles;

            for (int i = 0; i < numTriangles; ++i)
            {
                ++_triangleCount;

                MeshTriangle meshTriangle = mesh.get_Triangle(i);
                StoreTriangle(meshTriangle, objModel);
            }

            #endregion

            return(numTriangles);
        }