Пример #1
0
        void fill_any_holes(out int nRemaining, out bool saw_spans)
        {
            MeshBoundaryLoops loops = new MeshBoundaryLoops(Mesh);

            nRemaining = 0;
            saw_spans  = loops.SawOpenSpans;

            foreach (var loop in loops)
            {
                if (Cancelled())
                {
                    break;
                }
                MinimalHoleFill filler = new MinimalHoleFill(Mesh, loop);
                bool            filled = filler.Apply();
                if (filled == false)
                {
                    if (Cancelled())
                    {
                        break;
                    }
                    SimpleHoleFiller fallback = new SimpleHoleFiller(Mesh, loop);
                    filled = fallback.Fill();
                }
            }
        }
Пример #2
0
        bool fill_minimal()
        {
            var  minfill = new MinimalHoleFill(Mesh, FillLoop);
            bool bOK     = minfill.Apply();

            return(bOK);
        }
Пример #3
0
        public AddTrianglesMeshChange fill_minimal(DMesh3 mesh, EdgeLoop loop)
        {
            AddTrianglesMeshChange addChange = null;
            MinimalHoleFill        filler    = new MinimalHoleFill(mesh, loop);

            filler.IgnoreBoundaryTriangles = false;
            filler.OptimizeDevelopability  = true;
            filler.OptimizeTriangles       = this.OptimizeTriangles;
            filler.DevelopabilityTolerance = this.OptimizeTrisDeviationThresh;

            bool fill_ok = filler.Apply();

            if (fill_ok)
            {
                addChange = new AddTrianglesMeshChange();
                addChange.InitializeFromExisting(mesh,
                                                 filler.FillVertices, filler.FillTriangles);
            }
            return(addChange);
        }
Пример #4
0
        void fill_trivial_holes(out int nRemaining, out bool saw_spans)
        {
            var loops = new MeshBoundaryLoops(Mesh);

            nRemaining = 0;
            saw_spans  = loops.SawOpenSpans;

            foreach (var loop in loops)
            {
                if (Cancelled())
                {
                    break;
                }

                bool filled = false;
                if (loop.VertexCount == 3)
                {
                    var filler = new SimpleHoleFiller(Mesh, loop);
                    filled = filler.Fill();
                }
                else if (loop.VertexCount == 4)
                {
                    var filler = new MinimalHoleFill(Mesh, loop);
                    filled = filler.Apply();
                    if (filled == false)
                    {
                        var fallback = new SimpleHoleFiller(Mesh, loop);
                        filled = fallback.Fill();
                    }
                }

                if (filled == false)
                {
                    ++nRemaining;
                }
            }
        }