Example #1
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            Curve polyline = null;

            if (!DA.GetData(0, ref polyline))
            {
                return;
            }
            List <Point3d> pts   = ViperClass.Ptsss(polyline);
            List <Line>    lines = new List <Line>();

            if (pts.Count > 3)
            {
                for (int i = 0; i < pts.Count; i++)
                {
                    for (int j = i + 2; j < pts.Count; j++)
                    {
                        if (i == 0 && j == pts.Count - 1)
                        {
                            break;
                        }
                        Line l = new Line(pts[i], pts[j]);
                        lines.Add(l);
                    }
                }
            }
            DA.SetDataList(0, lines);
        }
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            ///////////////////////////////////////////////////////////////////////////////////////////////////声明变量
            Curve c1 = null;
            Curve c2 = null;

            ///////////////////////////////////////////////////////////////////////////////////////////////////检测输入端是否合理
            if (!DA.GetData(0, ref c1))
            {
                return;
            }
            if (!DA.GetData(1, ref c2))
            {
                return;
            }
            List <Point3d> ptcor1    = ViperClass.Ptsss(c1);
            List <Point3d> ptcor2    = ViperClass.Ptsss(c2);
            Polyline       polylineA = new Polyline(ptcor1);
            Polyline       polylineB = new Polyline(ptcor2);
            List <double>  angles1   = new List <double>();
            List <double>  angles2   = new List <double>();
            List <double>  ag1       = new List <double>();
            List <double>  ag2       = new List <double>();
            int            n1        = polylineA.SegmentCount;
            int            n2        = polylineB.SegmentCount;
            bool           flag      = false;

            if (n1 == n2)
            {
                flag = true;
                Line[] ls1 = polylineA.GetSegments();
                Line[] ls2 = polylineB.GetSegments();
                for (int i = 0; i < n1; i++)
                {
                    if (i == n1 - 1)
                    {
                        Line   la11 = ls1[i];
                        Line   la22 = ls1[0];
                        double aa   = Math.Round(ViperClass.getangle(la11, la22), 3);
                        angles1.Add(aa);
                        Line   lb11 = ls2[i];
                        Line   lb22 = ls2[0];
                        double bb   = Math.Round(ViperClass.getangle(lb11, lb22), 3);
                        angles2.Add(bb);
                        continue;
                    }
                    Line   la1 = ls1[i];
                    Line   la2 = ls1[i + 1];
                    double a   = Math.Round(ViperClass.getangle(la1, la2), 3);
                    angles1.Add(a);
                    Line   lb1 = ls2[i];
                    Line   lb2 = ls2[i + 1];
                    double b   = Math.Round(ViperClass.getangle(lb1, lb2), 3);
                    angles2.Add(b);
                }
                angles1.Sort();
                angles2.Sort();
                for (int i = 0; i < n1; i++)
                {
                    if (angles1[i] != angles2[i])
                    {
                        flag = false;
                        break;
                    }
                }
            }
            DA.SetData(0, flag);
        }