public PartialModel(TriBag _bag, Color _clr, TranslateTransform3D _tt, bool _transparent) { bag = _bag; clr = _clr; bTransparent = _transparent; gm3d = new GeometryModel3D(); if (_tt != null) { gm3d.Transform = _tt; } Brush br = new SolidColorBrush(clr); if (bTransparent) { br.Opacity = wpfmisc.TRANSPARENT_OPACITY_VALUE; } gm3d.Material = new DiffuseMaterial(br); mesh = new MeshGeometry3D(); gm3d.Geometry = mesh; mesh.Positions = new Point3DCollection(); mesh.TriangleIndices = new Int32Collection(); ndx = 0; tris = new List <Triangle3d>(); }
private void MakeModels(TriBag bag, TranslateTransform3D tt, List <Face> highlights) { bool bTransparent = (transparencies != null) && (transparencies.Contains(bag.solid.name)); Dictionary <Color, PartialModel> curmodels = new Dictionary <Color, PartialModel>(); foreach (Triangle3d t in bag.tris) { Color clr; if ( bShowHighlights && (highlights != null) && highlights.Contains(t.face) ) { clr = Colors.Cyan; } else { if (bShowEndGrain) { clr = GetColorByFaceQuality(t.face); } else { var c = t.face.solid.material.GetColor(); clr = Color.FromRgb(c.R, c.G, c.B); } } PartialModel pm; if (!curmodels.ContainsKey(clr)) { pm = new PartialModel(bag, clr, tt, bTransparent); curmodels[clr] = pm; } else { pm = curmodels[clr]; } pm.Add(t); } if (bTransparent) { this.models.AddRange(curmodels.Values); } else { this.models.InsertRange(0, curmodels.Values); } }