Ejemplo n.º 1
0
        private void GetAlignmentInfoAfterChange(String alignmentName)
        {
            ObjectId  alignOid = doc.GetSitelessAlignmentId(alignmentName);
            Alignment align    = ts.GetObject(alignOid, OpenMode.ForRead) as Alignment;

            m_editor.WriteMessage("\n{0, -50} {1} \n", "UseDesignSpeed :", align.UseDesignSpeed);
            m_editor.WriteMessage("{0, -50} {1} \n", "UseDesignCheckSet :", align.UseDesignCheckSet);
            m_editor.WriteMessage("{0, -50} {1} \n", "UseDesignCriteriaFile :", align.UseDesignCriteriaFile);
            m_editor.WriteMessage("{0, -50} {1} \n", "ReferencePoint :", align.ReferencePoint);
            m_editor.WriteMessage("{0, -50} {1} \n", "ReferencePointStation :", align.ReferencePointStation);
            m_editor.WriteMessage("{0, -50} {1} \n", "StationIndexIncrement :", align.StationIndexIncrement);
            m_editor.WriteMessage("{0, -50} {1} \n", "StyleName :", align.StyleName);

            StationEquationCollection StationEquationColl = align.StationEquations;

            m_editor.WriteMessage("{0, -50} {1} \n", "StationEquation Collection count :", StationEquationColl.Count);

            SuperelevationCriticalStationCollection SuperEleData = align.SuperelevationCriticalStations;

            m_editor.WriteMessage("{0, -50} {1} \n", "Superelevation Critical Stations count :", SuperEleData.Count);

            DesignSpeedCollection DesignSpeedColl = align.DesignSpeeds;

            m_editor.WriteMessage("{0, -50} {1} \n", "DesignSpeed Collection count :", DesignSpeedColl.Count);
        }
Ejemplo n.º 2
0
        //Get complex alignment properties.
        private void GetAlignmentComplexInfo(String alignmentName)
        {
            ObjectId  alignOid = doc.GetSitelessAlignmentId(alignmentName);
            Alignment align    = ts.GetObject(alignOid, OpenMode.ForRead) as Alignment;

            m_editor.WriteMessage("\n----------------Alignment Complex properties - begin----------------\n");

            DesignSpeedCollection DesignSpeedColl = align.DesignSpeeds;

            m_editor.WriteMessage("{0, -50} {1} \n", "DesignSpeed Collection count :", DesignSpeedColl.Count);

            ObjectIdCollection LabelGroupColl = align.GetLabelGroupIds();

            m_editor.WriteMessage("{0, -50} {1} \n", "LabelGroup Collection count :", LabelGroupColl.Count);

            ObjectIdCollection LabelColl = align.GetLabelIds();

            m_editor.WriteMessage("{0, -50} {1} \n", "Label Collection count :", LabelColl.Count);

            ObjectIdCollection ProfileIdColl = align.GetProfileIds();

            m_editor.WriteMessage("{0, -50} {1} \n", "ProfileId Collection count :", ProfileIdColl.Count);

            ObjectIdCollection ProfileViewIdColl = align.GetProfileViewIds();

            m_editor.WriteMessage("{0, -50} {1} \n", "ProfileViewId Collection count :", ProfileViewIdColl.Count);

            ObjectIdCollection SampleLineGroupIdColl = align.GetSampleLineGroupIds();

            m_editor.WriteMessage("{0, -50} {1} \n", "SampleLineGroupId Collection count :", SampleLineGroupIdColl.Count);

            StationEquationCollection StationEquationColl = align.StationEquations;

            m_editor.WriteMessage("{0, -50} {1} \n", "StationEquation Collection count :", StationEquationColl.Count);

            SuperelevationCriticalStationCollection SuperEleData = align.SuperelevationCriticalStations;

            m_editor.WriteMessage("{0, -50} {1} \n", "Superelevation Critical Stations count :", SuperEleData.Count);
        }
Ejemplo n.º 3
0
        copyAlignFromXref(ObjectId idAlign, string strSource)
        {
            Alignment objAlign = (Alignment)idAlign.getEnt();
            AlignmentEntityCollection objAlignEnts = default(AlignmentEntityCollection);
            AlignmentEntity           objAlignEnt  = default(AlignmentEntity);
            AlignmentArc  objAlignEntArc           = default(AlignmentArc);
            AlignmentLine objAlignEntTan           = default(AlignmentLine);

            Point2d pnt2dBeg        = objAlign.ReferencePoint;
            double  dblStationStart = objAlign.ReferencePointStation;
            string  strAlignName    = objAlign.Name;

            StationEquationCollection objStationEQs   = objAlign.StationEquations;
            List <AlgnEntData>        varAlignEntData = listAlignEnts(objAlign);

            objAlignEnts = objAlign.Entities;

            List <Vertex2d> pnts2dPoly = new List <Vertex2d>();

            double bulge = 0;

            for (int i = 0; i < varAlignEntData.Count; i++)
            {
                objAlignEnt = objAlignEnts.EntityAtId(varAlignEntData[i].ID);

                if (objAlignEnt.EntityType == AlignmentEntityType.Arc)
                {
                    objAlignEntArc = (AlignmentArc)objAlignEnt;

                    if (i == objAlignEnts.Count - 1)
                    {
                        bulge = System.Math.Tan(objAlignEntArc.Delta / 4);
                        if (objAlignEntArc.Clockwise)
                        {
                            bulge = bulge * -1.0;
                        }
                        pnts2dPoly.Add(new Vertex2d(new Point3d(objAlignEntArc.StartPoint.X, objAlignEntArc.StartPoint.Y, 0), bulge, 0, 0, 0));
                        pnts2dPoly.Add(new Vertex2d(new Point3d(objAlignEntArc.EndPoint.X, objAlignEntArc.EndPoint.Y, 0), 0, 0, 0, 0));
                    }
                    else
                    {
                        bulge = System.Math.Tan(objAlignEntArc.Delta / 4);
                        if (objAlignEntArc.Clockwise)
                        {
                            bulge = bulge * -1;
                        }
                        pnts2dPoly.Add(new Vertex2d(new Point3d(objAlignEntArc.StartPoint.X, objAlignEntArc.StartPoint.Y, 0), bulge, 0, 0, 0));
                    }
                }
                else if (objAlignEnt.EntityType == AlignmentEntityType.Line)
                {
                    objAlignEntTan = (AlignmentLine)objAlignEnt;

                    if (i == objAlignEnts.Count - 1)
                    {
                        pnts2dPoly.Add(new Vertex2d(new Point3d(objAlignEntTan.StartPoint.X, objAlignEntTan.StartPoint.Y, 0), 0, 0, 0, 0));
                        pnts2dPoly.Add(new Vertex2d(new Point3d(objAlignEntTan.EndPoint.X, objAlignEntTan.EndPoint.Y, 0), 0, 0, 0, 0));
                    }
                    else
                    {
                        pnts2dPoly.Add(new Vertex2d(new Point3d(objAlignEntTan.StartPoint.X, objAlignEntTan.StartPoint.Y, 0), 0, 0, 0, 0));
                    }
                }
            }

            ObjectId idPoly = Draw.addPoly(pnts2dPoly);

            string strLayer = "";

            if (strSource == "WALLDESIGN")
            {
                strLayer = "WALL-PROFILE";
            }
            else
            {
                strLayer = strSource;
            }

            Layer.manageLayers(strLayer);

            Alignment objAlignNew = null;

            try
            {
                objAlignNew = Align.addAlignmentFromPoly(strAlignName, strLayer, idPoly, "Standard", "Standard", true);
            }
            catch (System.Exception ex)
            {
                System.Diagnostics.Debug.Print(ex.ToString());
                return(null);
            }

            objAlignNew.ReferencePointStation = dblStationStart;

            double dblStaBack  = 0;
            double dblStaAhead = 0;
            StationEquationType objStaEqType = default(StationEquationType);

            for (int i = 0; i <= objStationEQs.Count - 1; i++)
            {
                dblStaBack   = objStationEQs[i].RawStationBack;
                dblStaAhead  = objStationEQs[i].StationAhead;
                objStaEqType = objStationEQs[i].EquationType;

                objAlignNew.StationEquations.Add(dblStaBack, dblStaAhead, objStaEqType);
            }
            return(objAlignNew);
        }
Ejemplo n.º 4
0
        getCardinals_Vertical(ObjectId idAlign, ref List <POI> varpoi)
        {
            Alignment objAlign = (Alignment)idAlign.getEnt();
            StationEquationCollection objStationEQs = objAlign.StationEquations;
            double dblSlope = 0, dblElevBase = 0, dblSlopeAhead = 0, dblLen = 0, dblElev = 0, dblLenAhead = 0, dblLenBack = 0;

            Debug.Print("Begin raw HC and Points");

            for (int i = 0; i < varpoi.Count; i++)
            {
                Debug.Print(i + " " + varpoi[i].Station + " " + varpoi[i].Elevation + " " + varpoi[i].Desc0 + " " + varpoi[i].PntNum);
            }
            Debug.Print("End raw HC and Points");

            List <POI> varPOI_VC = testVerticals(varpoi);
            //varPOI_VC = testVerticals(varPOI_VC)    'second pass to take care of triplicate points

            //BEGIN PREPARE LIST OF HC WITH ELEVATIONS
            POI           vpoi = new POI();
            List <double> dblStaHC = new List <double>();
            List <POI>    varPOI_HC = new List <POI>();

            for (int i = 0; i < varPOI_VC.Count; i++)
            {
                if (varPOI_VC[i].Desc0 == "HC")
                {
                    dblStaHC.Add(varPOI_VC[i].Station);//list of HC locations by station

                    if (varPOI_VC[i].Elevation != 0)
                    {
                        varPOI_HC.Add(varPOI_VC[i]);//list of HCs with elevation
                    }
                    else
                    {
                        vpoi         = varPOI_VC[i];
                        vpoi.Desc0   = "H0";
                        varPOI_VC[i] = vpoi;
                    }
                }
            }
            //END PREPARE LIST OF HC WITH ELEVATIONS

            //BEGIN SLOPE CALC BETWEEN HC WITH ELEVATION

            if (objStationEQs.Count == 0)
            {
                for (int i = 0; i < varPOI_HC.Count; i++)
                {
                    dblLenAhead = varPOI_HC[i + 1].Station - varPOI_HC[i + 0].Station;
                    if (dblLenAhead != 0)
                    {
                        varPOI_HC[i].SlopeH2H = System.Math.Round((varPOI_HC[i + 1].Elevation - varPOI_HC[i + 0].Elevation) / dblLenAhead, 5);
                    }
                }
            }
            else
            {
                Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Alignment has Station Equation - See Developer");
                return(false);
            }
            //END SLOPE CALC BETWEEN HC WITH ELEVATION

            //BEGIN SET ELEVATION ON MISSING HC
            //BEGIN CHECK ON FIRST POINT

            if (varPOI_HC.Count > 0)
            {
                //k = UBound(varPOI_HC)                     'start with existing list of HCs with elevation
                if (varPOI_VC[0].Desc0 == "H0")
                {
                    int x = 0;
                    for (int i = 1; i < varPOI_VC.Count; i++)
                    {
                        dblElev = varPOI_VC[i].Elevation;
                        if (dblElev != 0)
                        {
                            x = i;
                            break;
                        }
                    }

                    dblLen = varPOI_HC[0].Station - varPOI_VC[x].Station;

                    if (dblLen == 0)
                    {
                        varPOI_VC[0].Elevation = varPOI_HC[0].Elevation + -varPOI_HC[0].SlopeH2H * (varPOI_HC[0].Station - varPOI_VC[0].Station);
                    }
                    else
                    {
                        dblSlopeAhead          = (varPOI_HC[0].Elevation - varPOI_VC[x].Elevation) / dblLen;
                        varPOI_VC[0].Elevation = dblElev + -dblSlopeAhead * (varPOI_VC[x].Station - varPOI_VC[0].Station);
                    }

                    varPOI_VC[0].Desc0 = "HE";

                    varPOI_HC.Add(varPOI_VC[0]);

                    var sortSta = from s in varPOI_HC
                                  orderby s.Station ascending
                                  select s;
                    List <POI> poiTmp = new List <POI>();
                    foreach (var s in sortSta)
                    {
                        poiTmp.Add(s);
                    }

                    varPOI_HC = poiTmp;

                    //recompute slope between all HCs instead of finding matching station
                    for (int i = 0; i < varPOI_HC.Count; i++)
                    {
                        varPOI_HC[i].SlopeH2H = System.Math.Round((varPOI_HC[i + 1].Elevation - varPOI_HC[i + 0].Elevation) / (varPOI_HC[i + 1].Station - varPOI_HC[i + 0].Station), 5);
                    }
                }
                else
                {
                    var sortSta = from s in varPOI_HC
                                  orderby s.Station ascending
                                  select s;
                    List <POI> poiTmp = new List <POI>();
                    foreach (var s in sortSta)
                    {
                        poiTmp.Add(s);
                    }

                    varPOI_HC = poiTmp;
                }
                //END CHECK ON FIRST POINT

                //BEGIN CHECK ON REMAINING POINTS
                //start with existing list of HCs with elevation

                for (int i = 1; i < varPOI_VC.Count; i++)
                {
                    if (varPOI_VC[i].Desc0 == "H0")
                    {
                        for (int j = 1; j < varPOI_VC.Count; j++)
                        {
                            if (varPOI_VC[i - 1].Station < varPOI_VC[i].Station & varPOI_VC[i].Station < varPOI_VC[i + 1].Station)
                            {
                                if (varPOI_VC[i + 1].Elevation != 0 & varPOI_VC[i - 1].Elevation != 0)
                                {
                                    dblLen      = varPOI_VC[i + 1].Station - varPOI_VC[i - 1].Station;
                                    dblElevBase = varPOI_VC[i - 1].Elevation;
                                    dblSlope    = (varPOI_VC[i + 1].Elevation - dblElevBase) / dblLen;
                                    dblLen      = varPOI_VC[i + 0].Station - varPOI_VC[i - 1].Station;
                                }
                                else if (varPOI_VC[i + 1].Elevation != 0 & varPOI_VC[i - 1].Elevation == 0)
                                {
                                    dblLen      = varPOI_VC[i + 1].Station - varPOI_VC[i - 2].Station;
                                    dblElevBase = varPOI_VC[i - 2].Elevation;
                                    dblSlope    = (varPOI_VC[i + 1].Elevation - dblElevBase) / dblLen;
                                    dblLen      = varPOI_VC[i + 0].Station - varPOI_VC[i - 2].Station;
                                }
                                else if (varPOI_VC[i + 1].Elevation == 0 & varPOI_VC[i - 1].Elevation != 0)
                                {
                                    if (i < varPOI_VC.Count - 2)
                                    {
                                        dblLen      = varPOI_VC[i + 2].Station - varPOI_VC[i - 1].Station;
                                        dblElevBase = varPOI_VC[i - 1].Elevation;
                                        dblSlope    = (varPOI_VC[i + 2].Elevation - dblElevBase) / dblLen;
                                        dblLen      = varPOI_VC[i + 0].Station - varPOI_VC[i - 1].Station;
                                    }
                                    else
                                    {
                                    }
                                }
                                else if (i > 1 && i < varPOI_VC.Count - 3)
                                {
                                    if (varPOI_VC[i + 1].Elevation == 0 & varPOI_VC[i - 1].Elevation == 0)
                                    {
                                        if (i < varPOI_VC.Count - 2)
                                        {
                                            dblLen      = varPOI_VC[i + 2].Station - varPOI_VC[i - 2].Station;
                                            dblElevBase = varPOI_VC[i - 2].Elevation;
                                            dblSlope    = (varPOI_VC[i + 2].Elevation - dblElevBase) / dblLen;
                                            dblLen      = varPOI_VC[i + 0].Station - varPOI_VC[i - 2].Station;
                                        }
                                        else
                                        {
                                        }
                                    }
                                }

                                POI poiTmp = varPOI_VC[i];

                                poiTmp.Elevation = System.Math.Round(dblElevBase + dblSlope * dblLen, 3);
                                poiTmp.Desc0     = "HE";
                                varPOI_VC[i]     = poiTmp;

                                varPOI_HC.Add(varPOI_VC[i]);
                                break;
                            }
                        }
                    }
                }
            }

            int a = varPOI_VC.Count - 1;

            if (varPOI_VC[a].Desc0 == "H0")
            {
                dblLen      = varPOI_VC[a - 1].Station - varPOI_VC[a - 2].Station;
                dblElevBase = varPOI_VC[a - 1].Elevation;
                dblSlope    = (dblElevBase - varPOI_VC[a - 2].Elevation) / dblLen;
                dblLen      = varPOI_VC[a].Station - varPOI_VC[a - 1].Station;

                POI poiTemp = varPOI_VC[a];
                poiTemp.Elevation = System.Math.Round(dblElevBase + dblSlope * dblLen, 3);
                poiTemp.Desc0     = "HE";
                varPOI_VC[a]      = poiTemp;

                varPOI_HC.Add(varPOI_VC[a]);
            }

            Debug.Print("Begin SET ELEVATION ON MISSING HC");

            for (int i = 0; i < varPOI_HC.Count; i++)
            {
                Debug.Print(i + " " + varPOI_HC[i].Station + " " + varPOI_HC[i].Elevation + " " + varPOI_HC[i].Desc0 + " " + varPOI_HC[i].PntNum);
            }
            Debug.Print("End SET ELEVATION ON MISSING HC");

            //END CHECK ON REMAINING POINTS
            //END SET ELEVATION ON MISSING HC

            varPOI_HC = varPOI_HC.sortPOIbyStation();

            //BEGIN SLOPE CALC FOR EACH POINT

            dblLenAhead = (varPOI_VC[1].Station - varPOI_VC[0].Station);

            if (dblLenAhead != 0)
            {
                varPOI_VC[0].SlopeAhead = System.Math.Round((varPOI_VC[1].Elevation - varPOI_VC[0].Elevation) / dblLenAhead, 5);
            }

            int u = varPOI_VC.Count - 1;

            for (int i = 1; i < u - 1; i++)
            {
                dblLenBack  = (varPOI_VC[i - 0].Station - varPOI_VC[i - 1].Station);
                dblLenAhead = (varPOI_VC[i + 1].Station - varPOI_VC[i + 0].Station);

                vpoi = varPOI_VC[i];

                if (dblLenBack != 0)
                {
                    vpoi.SlopeBack = System.Math.Round((varPOI_VC[i - 1].Elevation - varPOI_VC[i - 0].Elevation) / dblLenBack, 5);
                }

                if (dblLenAhead != 0)
                {
                    vpoi.SlopeAhead = System.Math.Round((varPOI_VC[i + 1].Elevation - varPOI_VC[i + 0].Elevation) / dblLenAhead, 5);
                }
                varPOI_VC[i] = vpoi;
            }

            dblLenBack             = (varPOI_VC[u - 0].Station - varPOI_VC[u - 1].Station);
            varPOI_VC[u].SlopeBack = System.Math.Round((varPOI_VC[u - 1].Elevation - varPOI_VC[u - 0].Elevation) / dblLenBack, 5);
            //END SLOPE CALC FOR EACH POINT

            List <int> intIndexHC = new List <int>();

            for (int i = 0; i < varPOI_VC.Count; i++)
            {
                switch (varPOI_VC[i].Desc0.Substring(0, 2))
                {
                case "HC":
                case "HE":
                case "H0":
                    intIndexHC.Add(i);
                    break;
                }
            }

            Debug.Print("Begin POI_VC");

            for (int i = 0; i < varPOI_VC.Count; i++)
            {
                Debug.Print(i + " " + varPOI_VC[i].Station + " " + varPOI_VC[i].Elevation + " " + varPOI_VC[i].SlopeAhead + " " + varPOI_VC[i].SlopeBack + " " + varPOI_VC[i].Desc0 + ": " + varPOI_VC[i].PntNum);
            }
            Debug.Print("End POI_VC");

            //BEGIN CHECK FOR POINTS ON GRADE
            int    intSlopeO = 0, intSlopeX = 0;
            double dblSlopeTotal = 0, dblSlopeAvg = 0, dblSlopeDiff = 0, dblSlopeDiffH2H = 0;
            bool   boolSlopeSame = false;

            if (intIndexHC.Count > 0)
            {
                for (int i = 0; i < intIndexHC.Count - 1; i++)
                {
                    if (varPOI_VC[i].SlopeAhead >= 0)
                    {
                        intSlopeO = 1;
                    }
                    else
                    {
                        intSlopeO = -1;
                    }

                    int k = 0;
                    dblSlopeTotal = 0.0;

                    for (int j = intIndexHC[i + 1]; j < intIndexHC[i + 1] - 1; j++)
                    {
                        if (varPOI_VC[j].SlopeAhead >= 0)
                        {
                            intSlopeX = 1;
                        }
                        else
                        {
                            intSlopeX = -1;
                        }

                        if (intSlopeX == intSlopeO)
                        {
                            boolSlopeSame = true;

                            k++;

                            dblSlopeTotal = dblSlopeTotal + varPOI_VC[j].SlopeAhead;
                        }
                        else
                        {
                            boolSlopeSame = false;
                            break;
                        }
                    }

                    if (boolSlopeSame)
                    {
                        dblSlopeAvg  = dblSlopeTotal / k;
                        dblSlopeDiff = System.Math.Abs(System.Math.Round(varPOI_HC[i].SlopeH2H - dblSlopeAvg, 5));

                        if (dblSlopeDiff < 0.0005)
                        {
                            Debug.Print(varPOI_HC[i].Station + " SlopeH2H: " + varPOI_HC[i].SlopeH2H);
                            Debug.Print(varPOI_HC[i + 1].Station + " SlopeH2H: " + varPOI_HC[i + 1].SlopeH2H);
                        }
                        else
                        {
                            for (int j = intIndexHC[i] + 1; j <= intIndexHC[i + 1] - 1; j++)
                            {
                                dblSlopeDiffH2H = System.Math.Abs(System.Math.Round(varPOI_VC[j].SlopeAhead - varPOI_HC[i].SlopeH2H, 4));
                                dblSlopeDiff    = System.Math.Abs(System.Math.Round(varPOI_VC[j].SlopeAhead + varPOI_VC[j].SlopeBack, 4));

                                if (dblSlopeDiff <= 0.0005)
                                {
                                    Debug.Print(varPOI_VC[j].Station + " " + "dblSlopeDiff <= 0.0005");
                                }
                                else if (dblSlopeDiff > 0.0005 | dblSlopeDiffH2H > 0.0005)
                                {
                                    varPOI_VC[j].Desc0 = "GB";
                                    Debug.Print(varPOI_VC[j].Station + " " + dblSlopeDiff);
                                }
                            }
                        }
                    }
                    else
                    {
                        for (int j = intIndexHC[i] + 1; j < intIndexHC[i + 1] + 1; j++)
                        {
                            dblSlopeDiff = System.Math.Abs(System.Math.Round(varPOI_VC[j].SlopeAhead + varPOI_VC[j].SlopeBack, 4));

                            if (dblSlopeDiff <= 0.0005)
                            {
                                Debug.Print(varPOI_VC[j].Station + " " + "dblSlopeDiff <= 0.0005");
                            }
                            else
                            {
                                varPOI_VC[j].Desc0 = "GB";
                                Debug.Print(varPOI_VC[j].Station + " " + dblSlopeDiff);
                            }
                        }
                    }
                }
            }
            else
            {
                if (varPOI_VC[0].SlopeAhead >= 0)
                {
                    intSlopeO = 1;
                }
                else
                {
                    intSlopeO = -1;
                }

                int k = 0;
                dblSlopeTotal = 0.0;

                //compute average slope between changes in sign of slope
                for (int j = 1; j < varPOI_VC.Count; j++)
                {
                    if (varPOI_VC[j].SlopeAhead >= 0)
                    {
                        intSlopeX = 1;
                    }
                    else
                    {
                        intSlopeX = -1;
                    }

                    if (intSlopeX == intSlopeO)
                    {
                        boolSlopeSame = true;

                        k = k + 1;

                        dblSlopeTotal = dblSlopeTotal + varPOI_VC[j].SlopeAhead;
                    }
                    else
                    {
                        boolSlopeSame = false;
                        break;
                    }
                }

                if (boolSlopeSame)
                {
                    dblSlopeAvg  = dblSlopeTotal / k;
                    dblSlopeDiff = System.Math.Abs(System.Math.Round(varPOI_HC[0].SlopeH2H - dblSlopeAvg, 5));

                    if (dblSlopeDiff < 0.0005)
                    {
                        Debug.Print(varPOI_HC[0].Station + " SlopeH2H: " + varPOI_HC[0].SlopeH2H);
                    }
                    else
                    {
                        //check points between HC
                        for (int j = 1; j < varPOI_VC.Count; j++)
                        {
                            dblSlopeDiffH2H = System.Math.Abs(System.Math.Round(varPOI_VC[j].SlopeAhead - varPOI_HC[0].SlopeH2H, 4));
                            dblSlopeDiff    = System.Math.Abs(System.Math.Round(varPOI_VC[j].SlopeAhead + varPOI_VC[j].SlopeBack, 4));

                            if (dblSlopeDiff <= 0.0005)
                            {
                                Debug.Print(varPOI_VC[j].Station + " " + "dblSlopeDiff <= 0.0005");
                            }
                            else if (dblSlopeDiff > 0.0005 | dblSlopeDiffH2H > 0.0005)
                            {
                                varPOI_VC[j].Desc0 = "GB";
                                Debug.Print(varPOI_VC[j].Station + " " + dblSlopeDiff);
                            }
                        }
                    }
                }
                else
                {
                    //check points between HC
                    for (int j = 1; j < varPOI_VC.Count; j++)
                    {
                        dblSlopeDiff = System.Math.Abs(System.Math.Round(varPOI_VC[j].SlopeAhead + varPOI_VC[j].SlopeBack, 4));

                        if (dblSlopeDiff <= 0.0005)
                        {
                            Debug.Print(varPOI_VC[j].Station + " " + "dblSlopeDiff <= 0.0005");
                        }
                        else
                        {
                            varPOI_VC[j].Desc0 = "GB";
                            Debug.Print(varPOI_VC[j].Station + " " + dblSlopeDiff);
                        }
                    }
                }
            }

            //END CHECK FOR POINTS ON GRADE

            Debug.Print("Begin Mod POI_VC");

            for (int i = 0; i < varPOI_VC.Count; i++)
            {
                Debug.Print(i + " " + varPOI_VC[i].Station + " " + varPOI_VC[i].Elevation + " " + varPOI_VC[i].SlopeAhead + " " + varPOI_VC[i].SlopeBack + " " + varPOI_VC[i].Desc0 + ": " + varPOI_VC[i].PntNum);
            }
            Debug.Print("End Mod POI_VC");

            //BEGIN LIST OF CARDINALS

            for (int i = 0; i < varPOI_VC.Count; i++)
            {
                switch (varPOI_VC[i].Desc0)
                {
                case "HC":
                case "HE":

                    if (varPOI_VC[i].SlopeBack + varPOI_VC[i].SlopeAhead != 0)
                    {
                        varPOI_VC[i].DescX = "GB " + varPOI_VC[i].Desc0;
                        //either HC or HE

                        varPOI_HC.Add(varPOI_VC[i]);
                    }
                    else if (i == 0 || i == varPOI_VC.Count - 1)
                    {
                        varPOI_HC.Add(varPOI_VC[i]);
                    }

                    break;

                case "GB":

                    varPOI_HC.Add(varPOI_VC[i]);

                    break;
                }
            }
            //END LIST OF CARDINALS

            Debug.Print("Begin Cardinals HC");

            for (int i = 0; i < varPOI_HC.Count; i++)
            {
                Debug.Print(i + " " + varPOI_HC[i].Station + " " + varPOI_HC[i].Elevation + " " + varPOI_HC[i].SlopeAhead + " " + varPOI_HC[i].Desc0 + " " + varPOI_HC[i].DescX);
            }
            Debug.Print("End Cardinals HC");

            varpoi = new List <POI>();
            varpoi = varPOI_HC;

            //first and last entries are cardinals
            for (int i = 1; i < varpoi.Count - 1; i++)
            {
                vpoi = varpoi[i];

                if (varpoi[i].SlopeBack > 0 && varpoi[i].SlopeAhead > 0)
                {
                    vpoi.Desc0 = "GB LP";
                }
                else if (varpoi[i].SlopeBack < 0 & varpoi[i].SlopeAhead < 0)
                {
                    vpoi.Desc0 = "GB HP";
                }

                varpoi[i] = vpoi;
            }
            //END VERTICAL CARDINALS

            Debug.Print("Begin Final Cardinals");

            for (int i = 0; i < varpoi.Count; i++)
            {
                Debug.Print(i + " " + varpoi[i].Station + " " + varpoi[i].Elevation + " " + varpoi[i].SlopeAhead + " " + varpoi[i].SlopeBack + " " + varpoi[i].Desc0 + " " + varpoi[i].DescX);
            }
            Debug.Print("End Final Cardinals");
            return(true);
        }