Пример #1
0
        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>();
        }
Пример #2
0
        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);
            }
        }