public VTex cLEnd()
        {
            pnt3d correctedEndPnt = new pnt3d(cdx(), cdy(), 0);
            VTex  returnVertex    = new VTex(correctedEndPnt, gEnd.getBuldge());

            return(returnVertex);
        }
        public VTex lEnd() //Local start vertex information always 0,0,0 and the global start bulge
        {
            pnt3d p         = new pnt3d(dx(), dy(), 0);
            VTex  returnVal = new VTex(p, gEnd.getBuldge());

            return(returnVal);
        }
        public VTex lStart() //Local start vertex information always 0,0,0 and the global start bulge
        {
            pnt3d p         = new pnt3d();
            VTex  returnVal = new VTex(p, gStart.getBuldge());

            return(returnVal);
        }
        public List <VTex> getPlineEnityCoords()
        {
            List <VTex> returnVertices = new List <VTex>();

            Object out1 = new object();
            object out2 = new object();

            try
            {
                cadApp.ActiveDocument.Utility.GetEntity(out out1, out out2, "Select polyline:");

                if (out1 == null)
                {
                    MessageBox.Show("Nothing Selected!");
                }
                Autodesk.AutoCAD.Interop.Common.AcadLWPolyline pline = out1 as Autodesk.AutoCAD.Interop.Common.AcadLWPolyline;
                double[] coords = pline.Coordinates as double[];


                for (int i = 0; i < (coords.Length + 1) / 2; ++i)
                {
                    pnt3d pnt = new pnt3d(coords[2 * i], coords[2 * i + 1], 0);
                    VTex  v   = new VTex(pnt, pline.GetBulge(i));

                    returnVertices.Add(v);
                }
            }
            catch
            {
                MessageBox.Show("Error Selecting Entity!");
            }
            return(returnVertices);
        }
        private void setCorrectedSegements()
        {
            for (int i = 0; i < originalSegments.Count; ++i)
            {
                if (i == 0)
                {
                    double cx = originalSegments[i].getGStart().getPnt3d().getX() + originalSegments[i].cdx();
                    double cy = originalSegments[i].getGStart().getPnt3d().getY() + originalSegments[i].cdy();
                    pnt3d  correctedEndPnt    = new pnt3d(cx, cy, 0);
                    VTex   correctedEndVertex = new VTex(correctedEndPnt, originalSegments[i].getGEnd().getBuldge());

                    pnt3d  newStartPoint        = new pnt3d(originalSegments[i].getGStart().getPnt3d().getX(), originalSegments[i].getGStart().getPnt3d().getY(), 0);
                    double newBulgeStart        = originalSegments[i].getGStart().getBuldge();
                    VTex   correctedStartVertex = new MWCadNameSpace.VTex(newStartPoint, newBulgeStart);

                    Segment newCorrectedSegment = new MWCadNameSpace.Segment(correctedStartVertex, correctedEndVertex);
                    correctedSegments.Add(newCorrectedSegment);
                }
                else
                {
                    VTex correctedStartVertex = correctedSegments[i - 1].getGEnd();
                    //double check_cdx = originalSegments[i].cdx();
                    //double check_cdy = originalSegments[i].cdy();

                    //MessageBox.Show("Corrected dx and dy " + check_cdx + "," + check_cdy);

                    //double check_getx = correctedStartVertex.getPnt3d().getX();
                    //double check_gety = correctedStartVertex.getPnt3d().getY();

                    //MessageBox.Show("Corrected startx and starty " + check_getx + "," + check_gety);

                    double cx = correctedStartVertex.getPnt3d().getX() + originalSegments[i].cdx();
                    double cy = correctedStartVertex.getPnt3d().getY() + originalSegments[i].cdy();



                    double newEndx = cx;
                    double newEndy = cy;

                    pnt3d correctedEndPnt    = new pnt3d(newEndx, newEndy, 0);
                    VTex  correctedEndVertex = new VTex(correctedEndPnt, originalSegments[i].getGEnd().getBuldge());

                    Segment newCorrectedSegment = new MWCadNameSpace.Segment(correctedStartVertex, correctedEndVertex);
                    correctedSegments.Add(newCorrectedSegment);
                }
            }
        }
        public Segment extractAsSegment(pnt3d startPnt)
        {
            //set the start point
            VTex startV = new VTex(startPnt, this.radiusAsBuldge());

            //find the end point
            double bearingAngle = (Convert.ToDouble(degrees) + Convert.ToDouble(minutes) / 60.00 + Convert.ToDouble(seconds) / 3600.00) * (Math.PI / 180);

            double dx = 0;
            double dy = 0;

            if (startDirection.Value == "North" && endDirection.Value == "East")
            {
                dx = (Math.Sin(bearingAngle) * length);
                dy = (Math.Cos(bearingAngle) * length);
            }
            else if (startDirection.Value == "North" && endDirection.Value == "West")
            {
                dx = -(Math.Sin(bearingAngle) * length);
                dy = (Math.Cos(bearingAngle) * length);
            }
            else if (startDirection.Value == "South" && endDirection.Value == "West")
            {
                dx = -(Math.Sin(bearingAngle) * length);
                dy = -(Math.Cos(bearingAngle) * length);
            }
            else if (startDirection.Value == "South" && endDirection.Value == "East")
            {
                dx = +(Math.Sin(bearingAngle) * length);
                dy = -(Math.Cos(bearingAngle) * length);
            }

            pnt3d endPnt = new pnt3d(startV.getPnt3d().getX() + dx, startV.getPnt3d().getY() + dy);

            VTex endV = new VTex(endPnt, 0);

            Segment returnSeg = new Segment(startV, endV);

            return(returnSeg);
        }
        VTex gEnd;   //Global Vertex Data

        public Segment(VTex _gStart, VTex _gEnd)
        {
            gStart = _gStart;
            gEnd   = _gEnd;
        }