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)); }
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)); }
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); } }
/// <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); }
/// <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); } }
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); }
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); }