Exemplo n.º 1
0
 public AKT_EllipseNurbs(AKT_NurbsPoint[] pnts, int degree, double[] knots, double[] knotsreparam, double length, AKT_Plane plane, double r1, double r2, AKT_Interval dom)
     : base(pnts, degree, knots, knotsreparam, length, CurveType.Ellipse, dom)
 {
     this.plane = plane;
     this.r1    = r1;
     this.r2    = r2;
 }
Exemplo n.º 2
0
 public AKT_CircleNurbs(AKT_NurbsPoint[] pnts, int degree, double[] knots, double[] knotsreparam, double length, AKT_Plane plane, double r, AKT_Interval dom)
     : base(pnts, degree, knots, knotsreparam, length, plane, r, r, dom)
 {
     this.CurveType |= NurbsCurves.CurveType.Circle;
 }
Exemplo n.º 3
0
        public List <AKT_Polyline> NakedEdges()
        {
            //IEnumerable<AKT_Polyline> polys = TopologyEdges.Edges.Distinct()
            //    .Select(a => new AKT_Polyline(m_vertices[a.S], m_vertices[a.E]));

            //IEnumerable<AKT_Polyline> polys = TopologyEdges.Edges.GroupBy(a => a, new AKT_MeshEdgePairs.EdgeComparer())
            //    .Where(b => b.Count() == 1)
            //    .Select(a => new AKT_Polyline(m_vertices[a.First().S], m_vertices[a.First().E]));

            List <AKT_MeshEdgePairs> edges = new List <AKT_MeshEdgePairs>();

            foreach (AKT_MeshFace f in Faces.Faces)
            {
                edges.Add(new AKT_MeshEdgePairs(f.A, f.B));
                edges.Add(new AKT_MeshEdgePairs(f.B, f.C));

                if (f.MeshType == MeshTypology.Triangular)
                {
                    edges.Add(new AKT_MeshEdgePairs(f.C, f.A));
                }
                else
                {
                    edges.Add(new AKT_MeshEdgePairs(f.C, f.D));
                    edges.Add(new AKT_MeshEdgePairs(f.D, f.A));
                }
            }

            var polys1 = edges.GroupBy(a => a, new AKT_MeshEdgePairs.EdgeComparer());
            var polys2 = polys1.Where(b => b.Count() == 1);
            var polys3 = polys2.Select(a => new AKT_Polyline(m_vertices[a.First().S], m_vertices[a.First().E]));


            //var polys1Arr = polys1.ToArray();
            //var polys2Arr = polys2.ToArray();
            //var polys3Arr = polys3.ToArray();


            return(AKT_Polyline.JoinPolylines(polys3));

            return(polys3.ToList());

            AKT_Polyline[] polpo = polys3.ToArray();

            //List<List<AKT_MeshEdgePairs>> lll = new List<List<AKT_MeshEdgePairs>>();

            //foreach (var x in TopologyEdges.Edges)
            //{
            //    List<AKT_MeshEdgePairs> ll = new List<AKT_MeshEdgePairs>();

            //    foreach (var y in TopologyEdges.Edges)
            //    {
            //        bool e = x.E == y.E || x.E == y.S;
            //        bool s = x.S == y.E || x.S == y.S;

            //        bool a = e && s;

            //        if (a)
            //        {
            //            ll.Add(y);
            //        }

            //    }

            //    lll.Add(ll);

            //}

            return(AKT_Polyline.JoinPolylines(polys3));



            AKT_Mesh            mesh      = this;
            List <AKT_Interval> intervals = new List <AKT_Interval>();

            bool[] nakedEdgePointStatus = mesh.GetNakedEdgePointStatus();
            int    i = 0;

            while (true)
            {
                if (i >= mesh.m_faces.Count)
                {
                    break;
                }
                AKT_MeshFace face = mesh.m_faces[i];
                int          a    = face.A;
                int          b    = face.B;
                if ((!nakedEdgePointStatus[a] ? false : nakedEdgePointStatus[b]))
                {
                    if (intervals.IndexOf(new AKT_Interval((double)b, (double)a)) != -1)
                    {
                        intervals.Remove(new AKT_Interval((double)b, (double)a));
                    }
                    else if (intervals.IndexOf(new AKT_Interval((double)a, (double)b)) == -1)
                    {
                        intervals.Add(new AKT_Interval((double)a, (double)b));
                    }
                    else
                    {
                        intervals.Remove(new AKT_Interval((double)a, (double)b));
                    }
                }
                a = face.B;
                b = face.C;
                if ((!nakedEdgePointStatus[a] ? false : nakedEdgePointStatus[b]))
                {
                    if (intervals.IndexOf(new AKT_Interval((double)b, (double)a)) != -1)
                    {
                        intervals.Remove(new AKT_Interval((double)b, (double)a));
                    }
                    else if (intervals.IndexOf(new AKT_Interval((double)a, (double)b)) == -1)
                    {
                        intervals.Add(new AKT_Interval((double)a, (double)b));
                    }
                    else
                    {
                        intervals.Remove(new AKT_Interval((double)a, (double)b));
                    }
                }
                if (face.MeshType != MeshTypology.Triangular)
                {
                    a = face.C;
                    b = face.D;
                    if ((!nakedEdgePointStatus[a] ? false : nakedEdgePointStatus[b]))
                    {
                        if (intervals.IndexOf(new AKT_Interval((double)b, (double)a)) != -1)
                        {
                            intervals.Remove(new AKT_Interval((double)b, (double)a));
                        }
                        else if (intervals.IndexOf(new AKT_Interval((double)a, (double)b)) == -1)
                        {
                            intervals.Add(new AKT_Interval((double)a, (double)b));
                        }
                        else
                        {
                            intervals.Remove(new AKT_Interval((double)a, (double)b));
                        }
                    }
                    a = face.D;
                    b = face.A;
                    if ((!nakedEdgePointStatus[a] ? false : nakedEdgePointStatus[b]))
                    {
                        if (intervals.IndexOf(new AKT_Interval((double)b, (double)a)) != -1)
                        {
                            intervals.Remove(new AKT_Interval((double)b, (double)a));
                        }
                        else if (intervals.IndexOf(new AKT_Interval((double)a, (double)b)) == -1)
                        {
                            intervals.Add(new AKT_Interval((double)a, (double)b));
                        }
                        else
                        {
                            intervals.Remove(new AKT_Interval((double)a, (double)b));
                        }
                    }
                }
                else
                {
                    a = face.C;
                    b = face.A;
                    if ((!nakedEdgePointStatus[a] ? false : nakedEdgePointStatus[b]))
                    {
                        if (intervals.IndexOf(new AKT_Interval((double)b, (double)a)) != -1)
                        {
                            intervals.Remove(new AKT_Interval((double)b, (double)a));
                        }
                        else if (intervals.IndexOf(new AKT_Interval((double)a, (double)b)) == -1)
                        {
                            intervals.Add(new AKT_Interval((double)a, (double)b));
                        }
                        else
                        {
                            intervals.Remove(new AKT_Interval((double)a, (double)b));
                        }
                    }
                }
                i++;
            }
            if (intervals.Count > 0)
            {
                List <int> nums  = new List <int>(intervals.Count);
                List <int> nums1 = new List <int>(intervals.Count);
                for (i = 0; i < intervals.Count; i++)
                {
                    AKT_Interval item = intervals[i];
                    nums.Add((int)item.T0);
                    item = intervals[i];
                    nums1.Add((int)item.T1);
                }
            }
            return(null);
            //throw new NotImplementedException();
        }
Exemplo n.º 4
0
 public AKT_ArcNurbs(AKT_NurbsPoint[] pnts, int degree, double[] knots, double[] knotsreparam, double length, AKT_Plane plane, double r, double AngStart, double AngEnd, AKT_Interval dom)
     : base(pnts, degree, knots, knotsreparam, length, plane, r, r, dom)
 {
     this.AngStart   = AngStart;
     this.AngEnd     = AngEnd;
     this.CurveType |= NurbsCurves.CurveType.Arc;
 }