Example #1
0
        protected override void ExportModel(GeometryModel3D model, Transform3D transform)
        {
            writer.WriteLine(String.Format("o object{0}", objectNo++));
            writer.WriteLine(String.Format("g group{0}", groupNo++));
            string matName = String.Format("mat{0}", matNo++);

            writer.WriteLine(String.Format("usemtl {0}", matName));
            ExportMaterial(matName, model.Material, model.BackMaterial);
            var mesh = model.Geometry as MeshGeometry3D;

            ExportMesh(mesh, Transform3DHelper.CombineTransform(transform, model.Transform));
        }
Example #2
0
        protected override void ExportModel(GeometryModel3D model, Transform3D transform)
        {
            this.writer.WriteLine(string.Format("o {0}", (string)((DiffuseMaterial)model.Material).GetValue(NsbmdGlRenderer.polyName)));
            this.writer.WriteLine(string.Format("g {0}", (string)((DiffuseMaterial)model.Material).GetValue(NsbmdGlRenderer.polyName)));
            string str = (string)((DiffuseMaterial)model.Material).GetValue(NsbmdGlRenderer.matName);

            this.writer.WriteLine(string.Format("usemtl {0}", str));
            this.ExportMaterial(str, model.Material, model.BackMaterial);
            MeshGeometry3D geometry = model.Geometry as MeshGeometry3D;

            this.ExportMesh(geometry, Transform3DHelper.CombineTransform(transform, model.Transform));
        }
Example #3
0
        private static void Traverse <T>(Visual3D visual, Transform3D transform,
                                         Action <T, Transform3D> action) where T : Model3D
        {
            var childTransform = Transform3DHelper.CombineTransform(visual.Transform, transform);
            var model          = GetModel(visual);

            if (model != null)
            {
                TraverseModel(model, childTransform, action);
            }
            foreach (var child in GetChildren(visual))
            {
                Traverse(child, childTransform, action);
            }
        }
Example #4
0
        /// <summary>
        /// Finds the bounding box for the specified visual.
        /// </summary>
        /// <param name="visual">The visual.</param>
        /// <param name="transform">The transform if the visual.</param>
        /// <returns></returns>
        public static Rect3D FindBounds(Visual3D visual, Transform3D transform)
        {
            var bounds         = Rect3D.Empty;
            var childTransform = Transform3DHelper.CombineTransform(visual.Transform, transform);
            var model          = GetModel(visual);

            if (model != null)
            {
                // apply transform
                var transformedBounds = childTransform.TransformBounds(model.Bounds);
                bounds.Union(transformedBounds);
            }
            foreach (var child in GetChildren(visual))
            {
                var b = FindBounds(child, childTransform);
                bounds.Union(b);
            }
            return(bounds);
        }
Example #5
0
        /// <summary>
        /// Traverses the Model3D tree. Run the specified action for each Model3D.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model">The model.</param>
        /// <param name="transform">The transform.</param>
        /// <param name="action">The action.</param>
        public static void TraverseModel <T>(Model3D model, Transform3D transform, Action <T, Transform3D> action)
            where T : Model3D
        {
            var mg = model as Model3DGroup;

            if (mg != null)
            {
                var childTransform = Transform3DHelper.CombineTransform(model.Transform, transform);
                foreach (var m in mg.Children)
                {
                    TraverseModel(m, childTransform, action);
                }
            }

            var gm = model as T;

            if (gm != null)
            {
                var childTransform = Transform3DHelper.CombineTransform(model.Transform, transform);
                action(gm, childTransform);
            }
        }
Example #6
0
        private void Expand(GeometryModel3D model, Transform3D transformation)
        {
            Transform3D ot;

            if (originalTransforms.ContainsKey(model))
            {
                ot = originalTransforms[model];
            }
            else
            {
                ot = model.Transform;
                originalTransforms.Add(model, ot);
            }

            Transform3D totalTransform = Transform3DHelper.CombineTransform(transformation, ot);

            var mesh = model.Geometry as MeshGeometry3D;

            if (mesh == null)
            {
                return;
            }
            var bounds = new Rect3D();

            foreach (int i in mesh.TriangleIndices)
            {
                bounds.Union(totalTransform.Transform(mesh.Positions[i]));
            }

            Point3D  p = bounds.Location;
            Vector3D d = p - actualExpandOrigin;

            d *= Expansion;
            Point3D p2 = actualExpandOrigin + d;
            var     t  = new TranslateTransform3D(p2 - p);

            model.Transform = Transform3DHelper.CombineTransform(ot, t);
        }
Example #7
0
        private static GeneralTransform3D GetTransform(Model3D current, Model3D model, Transform3D parentTransform)
        {
            var currentTransform = Transform3DHelper.CombineTransform(current.Transform, parentTransform);

            if (current == model)
            {
                return(currentTransform);
            }
            var mg = current as Model3DGroup;

            if (mg != null)
            {
                foreach (var m in mg.Children)
                {
                    var result = GetTransform(m, model, currentTransform);
                    if (result != null)
                    {
                        return(result);
                    }
                }
            }
            return(null);
        }