Пример #1
0
        insertCurve(ObjectId idAlign)
        {
            Alignment align = (Alignment)idAlign.getEnt();
            AlignmentEntityCollection ents = align.Entities;
            PromptStatus ps;
            Point3d      pnt3dPick = UserInput.getPoint("Select Curve PI", out ps, osMode: 1);

            AlignmentEntity lineBefore = null;
            AlignmentEntity lineAfter  = null;

            for (int i = 0; i < ents.Count; i++)
            {
                AlignmentEntity ent = ents[i];
                if (ent.EntityType == AlignmentEntityType.Line)
                {
                    AlignmentLine line = (AlignmentLine)ent;
                    if (line.EndPoint.IsEqualTo(pnt3dPick.Convert2d(BaseObjs.xyPlane), new Tolerance(.01, .01)))
                    {
                        lineBefore = line;
                    }
                    if (line.StartPoint.IsEqualTo(pnt3dPick.Convert2d(BaseObjs.xyPlane), new Tolerance(.01, .01)))
                    {
                        lineAfter = line;
                    }
                }
            }

            AlignmentArc       arc         = ents.AddFreeCurve(lineBefore.EntityId, lineAfter.EntityId, 200.0, CurveParamType.Radius, false, CurveType.Compound);
            List <AlgnEntData> algnEntData = sortAlignEnts(align);

            fAlignEnts.updateForm(algnEntData);
            fAlignEnts.AlignHandle = align.Handle;
            Application.ShowModelessDialog(Application.MainWindow.Handle, fAlignEnts, false);
        }
Пример #2
0
        getStationTargetAlign(double dblStaRF, double dblOffRR, Alignment objAlignRF, Alignment objAlignTAR)
        {
            AlignmentEntity objAlignEntRF    = default(AlignmentEntity);
            AlignmentArc    objAlignEntArcRF = default(AlignmentArc);
            AlignmentLine   objAlignEntTanRF = default(AlignmentLine);

            AlignmentEntity objAlignEntTAR    = default(AlignmentEntity);
            AlignmentArc    objAlignEntArcTAR = default(AlignmentArc);
            AlignmentLine   objAlignEntTanTAR = default(AlignmentLine);

            double dblAngEntRF  = 0;
            double dblAngEntTAR = 0;

            double dblSkew   = 0;
            double dblOffRF  = 0;
            double dblStaTAR = 0;

            objAlignEntRF = objAlignRF.Entities.EntityAtStation(dblStaRF);
            if (objAlignEntRF.EntityType == AlignmentEntityType.Arc)
            {
                objAlignEntArcRF = (AlignmentArc)objAlignEntRF;
            }
            else if (objAlignEntRF.EntityType == AlignmentEntityType.Line)
            {
                objAlignEntTanRF = (AlignmentLine)objAlignEntRF;
            }

            Point2d pnt2dBEG = objAlignEntTanRF.StartPoint;
            Point2d pnt2dEND = objAlignEntTanRF.EndPoint;

            dblAngEntRF = pnt2dBEG.getDirection(pnt2dEND);

            objAlignRF.DistanceToAlignment(dblStaRF, objAlignTAR, AlignmentSide.Both, ref dblOffRF, ref dblStaTAR);

            objAlignEntTAR = objAlignTAR.Entities.EntityAtStation(dblStaTAR);
            if (objAlignEntTAR.EntityType == AlignmentEntityType.Arc)
            {
                objAlignEntArcTAR = (AlignmentArc)objAlignEntRF;
            }
            else if (objAlignEntTAR.EntityType == AlignmentEntityType.Line)
            {
                objAlignEntTanTAR = (AlignmentLine)objAlignEntTAR;
            }

            pnt2dBEG = objAlignEntTanTAR.StartPoint;

            pnt2dEND = objAlignEntTanTAR.EndPoint;

            dblAngEntTAR = pnt2dBEG.getDirection(pnt2dEND);

            dblSkew = dblAngEntTAR - dblAngEntRF;

            //dblStaTAR = dblStaRF * System.Math.Cos(dblSkew)
            return(dblStaTAR);
        }
Пример #3
0
        getAlignEntData(Alignment align)
        {
            List <AlgnEntData>        algnData = new List <AlgnEntData>();
            AlignmentEntityCollection ents     = align.Entities;

            foreach (AlignmentEntity ent in ents)
            {
                AlgnEntData aData = new AlgnEntData();
                if (ent.EntityType == AlignmentEntityType.Arc)
                {
                    AlignmentArc arc = (AlignmentArc)ent;
                    aData.ID     = arc.EntityId;
                    aData.Type   = "Arc";
                    aData.StaBeg = arc.StartStation;
                    aData.StaEnd = arc.EndStation;
                    aData.Length = arc.Length;
                    aData.Radius = arc.Radius;
                    try
                    {
                        aData.EntBefore = arc.EntityBefore;
                    }
                    catch
                    {
                        aData.EntBefore = 0;
                    }
                }
                else if (ent.EntityType == AlignmentEntityType.Line)
                {
                    AlignmentLine line = (AlignmentLine)ent;
                    aData.ID     = line.EntityId;
                    aData.Type   = "Line";
                    aData.StaBeg = line.StartStation;
                    aData.StaEnd = line.EndStation;
                    aData.Length = line.Length;
                    aData.Radius = 0;
                    try
                    {
                        aData.EntBefore = line.EntityBefore;
                    }
                    catch
                    {
                        aData.EntBefore = 0;
                    }
                }
                algnData.Add(aData);
            }
            return(algnData);
        }
Пример #4
0
        private static void AddICD(ref Alignment myAg, ref SRBA.PM bill, ref Editor ed)
        {
            double  curAngInDeg = bill.StartAngInDeg;
            Point3d St = new Point3d(bill.StartY, bill.StartX, 0);
            Point3d Ed, TmpPt;

            //AlignmentLine RefStartLine;
            //AlignmentArc curArc;
            AlignmentSpiral curSpiral;

            for (int i = 0; i < bill.ICDList.Count; i++)
            {
                SRBA.ICD item = bill.ICDList[i];
                switch (item.TypeID)
                {
                case 1:
                    Ed = new Point3d(St.X + Math.Sin(curAngInDeg) * item.Length, St.Y + Math.Cos(curAngInDeg) * item.Length, 0);
                    AlignmentLine l = myAg.Entities.AddFixedLine(St, Ed);
                    St          = Ed;
                    curAngInDeg = l.Direction;
                    break;

                case 2:
                    if (myAg.Entities.LastEntity != 0)
                    {
                        AlignmentArc a = myAg.Entities.AddFloatingCurve(myAg.Entities.LastEntity, item.R, item.Length, CurveParamType.CurveLength, item.isClookWise);
                        Ed = new Point3d(a.EndPoint.X, a.EndPoint.Y, 0);
                        myAg.Entities.Remove(a);
                        AlignmentArc b = myAg.Entities.AddFixedCurve(St, Ed, item.R, item.isClookWise);
                        St          = Ed;
                        curAngInDeg = b.EndDirection;
                    }
                    else
                    {
                        Ed = new Point3d(St.X - Math.Sin(curAngInDeg) * 10, St.Y - Math.Cos(curAngInDeg) * 10, 0);
                        AlignmentLine ll = myAg.Entities.AddFixedLine(Ed, St);
                        AlignmentArc  a  = myAg.Entities.AddFloatingCurve(myAg.Entities.LastEntity, item.R, item.Length, CurveParamType.CurveLength, item.isClookWise);
                        Ed = new Point3d(a.EndPoint.X, a.EndPoint.Y, 0);
                        myAg.Entities.Remove(a);
                        AlignmentArc b = myAg.Entities.AddFixedCurve(St, Ed, item.R, item.isClookWise);
                        St          = Ed;
                        curAngInDeg = b.EndDirection;
                        myAg.Entities.Remove(ll);
                    }
                    break;

                case 3:
                    if (myAg.Entities.LastEntity != 0)
                    {
                        AlignmentLine tp   = myAg.Entities.AddFloatingLine(myAg.Entities.LastEntity, 10.0);
                        Point3d       spii = new Point3d(tp.EndPoint.X, tp.EndPoint.Y, 0);
                        myAg.Entities.Remove(tp);
                        AlignmentSpiral s = myAg.Entities.AddFixedSpiral(myAg.Entities.LastEntity, St, spii, item.EndR, item.Length, SpiralCurveType.InCurve, item.isClookWise, SpiralType.Clothoid);
                        Ed          = new Point3d(s.EndPoint.X, s.EndPoint.Y, 0);
                        St          = Ed;
                        curAngInDeg = s.EndDirection;
                    }
                    else
                    {
                        TmpPt       = new Point3d(St.X + Math.Sin(curAngInDeg) * 10, St.Y + Math.Cos(curAngInDeg) * 10, 0);
                        curSpiral   = myAg.Entities.AddFixedSpiral(-1, St, TmpPt, item.EndR, item.Length, SpiralCurveType.InCurve, item.isClookWise, SpiralType.Clothoid);
                        Ed          = new Point3d(curSpiral.EndPoint.X, curSpiral.EndPoint.Y, 0);
                        St          = Ed;
                        curAngInDeg = curSpiral.EndDirection;
                    }

                    break;

                case 4:

                    if (myAg.Entities.LastEntity != 0)
                    {
                        AlignmentLine tmp = myAg.Entities.AddFloatingLine(myAg.Entities.LastEntity, 10.0);
                        Point3d       SPI = new Point3d(tmp.EndPoint.X, tmp.EndPoint.Y, 0);
                        myAg.Entities.Remove(tmp);
                        AlignmentSpiral sp = myAg.Entities.AddFixedSpiral(myAg.Entities.LastEntity, St, SPI,
                                                                          item.StartR, item.Length, SpiralCurveType.OutCurve, item.isClookWise, Autodesk.Civil.SpiralType.Clothoid);
                        Ed          = new Point3d(sp.EndPoint.X, sp.EndPoint.Y, 0);
                        St          = Ed;
                        curAngInDeg = sp.EndDirection;
                    }
                    else
                    {
                        TmpPt       = new Point3d(St.X + Math.Sin(curAngInDeg) * 10, St.Y + Math.Cos(curAngInDeg) * 10, 0);
                        curSpiral   = myAg.Entities.AddFixedSpiral(-1, St, TmpPt, item.StartR, item.Length, SpiralCurveType.OutCurve, item.isClookWise, SpiralType.Clothoid);
                        Ed          = new Point3d(curSpiral.EndPoint.X, curSpiral.EndPoint.Y, 0);
                        St          = Ed;
                        curAngInDeg = curSpiral.EndDirection;
                    }

                    break;

                case 5:
                    AlignmentLine tt5  = myAg.Entities.AddFloatingLine(myAg.Entities.LastEntity, 10.0);
                    Point3d       Sip5 = new Point3d(tt5.EndPoint.X, tt5.EndPoint.Y, 0);
                    myAg.Entities.Remove(tt5);
                    AlignmentSpiral ss5 = myAg.Entities.AddFixedSpiral(myAg.Entities.LastEntity, St, Sip5, item.StartR, item.EndR, item.Length, item.isClookWise, Autodesk.Civil.SpiralType.Clothoid);
                    Ed          = new Point3d(ss5.EndPoint.X, ss5.EndPoint.Y, 0);
                    St          = Ed;
                    curAngInDeg = ss5.EndDirection;
                    break;

                case 6:    //R小-R大

                    if (myAg.Entities.LastEntity != 0)
                    {
                        AlignmentLine tt  = myAg.Entities.AddFloatingLine(myAg.Entities.LastEntity, 10.0);
                        Point3d       Sip = new Point3d(tt.EndPoint.X, tt.EndPoint.Y, 0);
                        myAg.Entities.Remove(tt);
                        AlignmentSpiral ss = myAg.Entities.AddFixedSpiral(myAg.Entities.LastEntity, St, Sip, item.StartR, item.EndR, item.Length, item.isClookWise, Autodesk.Civil.SpiralType.Clothoid);
                        Ed          = new Point3d(ss.EndPoint.X, ss.EndPoint.Y, 0);
                        St          = Ed;
                        curAngInDeg = ss.EndDirection;
                    }

                    else
                    {
                        TmpPt       = new Point3d(St.X + Math.Sin(curAngInDeg) * 10, St.Y + Math.Cos(curAngInDeg) * 10, 0);
                        curSpiral   = myAg.Entities.AddFixedSpiral(-1, St, TmpPt, item.StartR, item.EndR, item.Length, item.isClookWise, Autodesk.Civil.SpiralType.Clothoid);
                        Ed          = new Point3d(curSpiral.EndPoint.X, curSpiral.EndPoint.Y, 0);
                        St          = Ed;
                        curAngInDeg = curSpiral.EndDirection;
                    }



                    break;

                default:
                    break;
                }
            }
        }
Пример #5
0
        getAnglePoints(ObjectId idAlign, ref List <POI> varpoi)
        {
            POI  vPoi       = new POI();
            bool boolClosed = false;

            string  strClass   = fStake.ClassObj;
            Profile objProfile = null;

            switch (strClass)
            {
            case "CURB":
                objProfile = Prof.getProfile(idAlign, "FLOWLINE");
                break;

            case "FL":
                objProfile = Prof.getProfile(idAlign, "STAKE");
                break;

            case "WTR":
                objProfile = Prof.getProfile(idAlign, "CPNT");
                break;

            case "BLDG":
                vPoi = new POI();
                break;
            }

            Alignment objAlign = (Alignment)idAlign.getEnt();
            AlignmentEntityCollection objAlignEnts = objAlign.Entities;
            double          dblElev      = 0;
            bool            isRightHand  = false;
            AlignmentEntity objAlignEnt0 = null;
            AlignmentEntity objAlignEntX = null;
            AlignmentLine   objAlignTan0 = null;
            AlignmentLine   objAlignTanX = null;
            AlignmentArc    objAlignArc0 = null;
            AlignmentArc    objAlignArcX = null;

            if (objAlignEnts.Count > 1)
            {
                for (int i = 0; i < objAlignEnts.Count - 1; i++)
                {
                    objAlignEnt0 = objAlignEnts[i + 0];
                    objAlignEntX = objAlignEnts[i + 1];

                    if (objAlignEnt0.EntityType == AlignmentEntityType.Line)
                    {
                        objAlignTan0 = (AlignmentLine)objAlignEnt0;

                        if (objAlignEntX.EntityType == AlignmentEntityType.Line)
                        {
                            objAlignTanX = (AlignmentLine)objAlignEntX;

                            double dblAng0 = objAlignTan0.StartPoint.getDirection(objAlignTan0.EndPoint);
                            double dblAngX = objAlignTanX.StartPoint.getDirection(objAlignTanX.EndPoint);

                            if (System.Math.Round(dblAng0, 3) != System.Math.Round(dblAngX, 3))
                            {
                                Point3d pnt3d1 = new Point3d(objAlignTan0.StartPoint.X, objAlignTan0.StartPoint.Y, 0);
                                Point3d pnt3d2 = new Point3d(objAlignTan0.EndPoint.X, objAlignTan0.EndPoint.Y, 0);
                                Point3d pnt3d3 = new Point3d(objAlignTanX.EndPoint.X, objAlignTanX.EndPoint.Y, 0);

                                double dblStation = System.Math.Round(objAlignTanX.StartStation, 3);
                                //          Debug.Print i

                                double dblAngDelta = Geom.getAngle3Points(pnt3d1, pnt3d2, pnt3d3);
                                double dblAngDir   = dblAngX;

                                Vector3d v3d1 = pnt3d2 - pnt3d1;
                                Vector3d v3d2 = pnt3d3 - pnt3d2;

                                Vector3d v3dC = v3d1.CrossProduct(v3d2);

                                if (v3dC.Z > 0)
                                {
                                    isRightHand = true;
                                }
                                else
                                {
                                    isRightHand = false;
                                }

                                switch (strClass)
                                {
                                case "CURB":
                                case "FL":
                                case "WTR":

                                    try
                                    {
                                        dblElev = System.Math.Round(objProfile.ElevationAt(dblStation), 3);
                                    }
                                    catch (System.Exception)
                                    {
                                    }

                                    break;
                                }

                                POI vpoi = new POI();

                                vpoi.Station     = dblStation;
                                vpoi.Desc0       = "AP";
                                vpoi.ClassObj    = strClass;
                                vpoi.AngDelta    = dblAngDelta;
                                vpoi.AngDir      = dblAngDir;
                                vpoi.isRightHand = isRightHand;
                                vpoi.Elevation   = dblElev;

                                varpoi.Add(vpoi);
                                varpoi = varpoi.sortPOIbyStation();
                            }
                        }
                    }
                }
            }

            objAlignEnt0 = objAlignEnts[objAlignEnts.FirstEntity - 1];
            objAlignEntX = objAlignEnts[objAlignEnts.LastEntity - 1];

            bool boolArc0 = false;
            bool boolArcX = false;
            bool boolTan0 = false;
            bool boolTanX = false;

            Point2d pnt2dBeg = Point2d.Origin, pnt2dEnd = Point2d.Origin;

            if (objAlignEnt0.EntityType == AlignmentEntityType.Arc)
            {
                objAlignArc0 = (AlignmentArc)objAlignEnt0;
                pnt2dBeg     = objAlignArc0.StartPoint;
                boolArc0     = true;
            }
            else
            {
                objAlignTan0 = (AlignmentLine)objAlignEnt0;
                pnt2dBeg     = objAlignTan0.StartPoint;
                boolTan0     = true;
            }

            if (objAlignEntX.EntityType == AlignmentEntityType.Arc)
            {
                objAlignArcX = (AlignmentArc)objAlignEntX;
                pnt2dEnd     = objAlignArcX.StartPoint;
                boolArcX     = true;
            }
            else
            {
                objAlignTanX = (AlignmentLine)objAlignEntX;
                pnt2dEnd     = objAlignTanX.StartPoint;
                boolTanX     = true;
            }

            if (System.Math.Round(pnt2dEnd.X, 2) == System.Math.Round(pnt2dBeg.X, 2))
            {
                if (System.Math.Round(pnt2dEnd.Y, 2) == System.Math.Round(pnt2dBeg.Y, 2))
                {
                    boolClosed         = true;
                    varpoi[0].isClosed = true;

                    if (boolArc0 & boolArcX)
                    {
                        varpoi[0].Desc0 = "PCC";
                    }
                    else if (boolArc0 & boolTanX)
                    {
                        //do nothing
                    }
                    else if (boolTan0 & boolArcX)
                    {
                        varpoi[0].Desc0 = "EC";
                    }
                    else if (boolTan0 & boolTanX)
                    {
                        Point3d pnt3d1 = new Point3d(objAlignTanX.StartPoint.X, objAlignTanX.StartPoint.Y, 0);
                        Point3d pnt3d2 = new Point3d(objAlignTanX.EndPoint.X, objAlignTanX.EndPoint.Y, 0);
                        Point3d pnt3d3 = new Point3d(objAlignTan0.EndPoint.X, objAlignTan0.EndPoint.Y, 0);

                        double dblAngDelta = Geom.getAngle3Points(pnt3d1, pnt3d2, pnt3d3);

                        double dblAng0   = objAlignTan0.StartPoint.getDirection(objAlignTan0.EndPoint);
                        double dblAngDir = dblAng0;

                        Vector3d v3d1 = pnt3d2 - pnt3d1;
                        Vector3d v3d2 = pnt3d3 - pnt3d2;

                        Vector3d v3dC = v3d1.CrossProduct(v3d2);

                        if (v3dC.Z > 0)
                        {
                            isRightHand = true;
                        }
                        else
                        {
                            isRightHand = false;
                        }

                        if (strClass == "BLDG")
                        {
                            varpoi[0].Station  = objAlignTan0.StartStation;
                            varpoi[0].Desc0    = "AP";
                            varpoi[0].DescX    = "BEG AP";
                            varpoi[0].ClassObj = strClass;
                            varpoi[0].AngDelta = dblAngDelta;
                            varpoi[0].AngDir   = dblAngDir;
                        }
                        else
                        {
                            varpoi[0].Desc0    = "AP";
                            varpoi[0].DescX    = "BEG AP";
                            varpoi[0].AngDelta = dblAngDelta;
                            varpoi[0].AngDir   = dblAngDir;
                        }
                    }
                }
            }

            if (boolClosed)
            {
                int j = varpoi.Count - 1;

                if (varpoi[j].Station != Math.roundDown3((objAlign.EndingStation)))
                {
                    POI vpoi = new POI();
                    vpoi.Station   = Math.roundDown3((objAlign.EndingStation));
                    vpoi.Elevation = varpoi[0].Elevation;
                    if (strClass == "BLDG")
                    {
                        vpoi.DescX = varpoi[0].DescX;
                    }
                    else
                    {
                        vpoi.DescX = "END AP";
                    }
                    vpoi.Desc0    = "AP";
                    vpoi.ClassObj = strClass;
                    vpoi.isClosed = true;

                    varpoi.Add(vpoi);
                }
                else
                {
                    POI vpoi = varpoi[j];

                    vpoi.Elevation = varpoi[0].Elevation;
                    vpoi.Desc0     = "AP";
                    if (strClass == "BLDG")
                    {
                        vpoi.DescX = varpoi[0].DescX;
                    }
                    vpoi.DescX    = "END AP";
                    vpoi.ClassObj = strClass;
                    vpoi.isClosed = true;
                    varpoi[j]     = vpoi;
                }
            }
        }
Пример #6
0
        getNestedPoints(ObjectId idAlign, ref List <POI> varPOI, BlockTableRecord btrMS, string strSource)
        {
            bool boolAdd = false;

            double dblToleranceAngle = PI, dblToleranceLength = 0, dblStation = 0, dblOffset = 0;

            Point2d pnt2dRef  = idAlign.getAlignRefPoint();
            string  strFilter = "*";

            if (strSource.Contains("GCAL"))
            {
                strFilter = "*CPNT*";
            }

            ObjectIdCollection ids = Cogo.getNestedPoints(btrMS);

            List <POI> varPOI_PNTs = new List <POI>();

            Alignment objAlign = (Alignment)idAlign.getEnt();

            using (var tr = BaseObjs.startTransactionDb()) {
                foreach (ObjectId id in ids)
                {
                    CogoPoint cogoPnt = (CogoPoint)tr.GetObject(id, OpenMode.ForRead);

                    if (cogoPnt.Layer.Contains(strFilter))
                    {
                        try {
                            idAlign.getAlignStaOffset(cogoPnt.Location, ref dblStation, ref dblOffset);
                        }
                        catch (Autodesk.Civil.PointNotOnEntityException) {
                            dblStation = 0.0;
                        }

                        if (dblStation != 0)
                        {
                            if (dblOffset < dblToleranceLength)
                            {
                                boolAdd = true;
                            }
                        }
                        else
                        {
                            Debug.Print(string.Format("{0},{1}", cogoPnt.Easting, cogoPnt.Northing));
                            Point2d pnt2d = new Point2d(cogoPnt.Easting, cogoPnt.Northing);

                            //distance from reference point < tolerance
                            if (pnt2d.getDistance(pnt2dRef) < dblToleranceLength)
                            {
                                double dblAngle1 = Base_Tools45.Math.roundDown3(pnt2d.getDirection(pnt2dRef));

                                AlignmentEntity objAlignEnt = objAlign.Entities.EntityAtId(objAlign.Entities.FirstEntity);

                                switch (objAlignEnt.EntityType)
                                {
                                case AlignmentEntityType.Arc:

                                    AlignmentArc objAlignEntArc = (AlignmentArc)objAlignEnt;

                                    double dblangle2 = Base_Tools45.Math.roundDown3(objAlignEntArc.StartDirection);

                                    if (System.Math.Abs(dblAngle1 - dblangle2) < dblToleranceAngle)
                                    {
                                        boolAdd    = true;
                                        dblStation = objAlign.StartingStation;
                                    }
                                    else if (System.Math.Abs(Base_Tools45.Math.roundDown3(dblAngle1 - 2 * PI) - dblangle2) < dblToleranceAngle)
                                    {
                                        boolAdd    = true;
                                        dblStation = objAlign.StartingStation;
                                    }

                                    break;

                                case AlignmentEntityType.Line:

                                    AlignmentLine objAlignEntTan = (AlignmentLine)objAlignEnt;

                                    dblangle2 = Base_Tools45.Math.roundDown3(objAlignEntTan.Direction);

                                    if (System.Math.Abs(dblAngle1 - dblangle2) < dblToleranceAngle)
                                    {
                                        boolAdd    = true;
                                        dblStation = objAlign.StartingStation;
                                    }

                                    break;
                                }
                            }
                            else
                            {
                                boolAdd = false;
                            }
                            //4
                        }

                        if (boolAdd == true)
                        {
                            POI vPOI_PNT = new POI();
                            vPOI_PNT.Station = Base_Tools45.Math.roundDown3(dblStation);

                            vPOI_PNT.PntNum    = cogoPnt.PointNumber.ToString();
                            vPOI_PNT.Elevation = System.Math.Round(cogoPnt.Elevation, 3);

                            vPOI_PNT.OFFSET    = System.Math.Round(dblOffset, 2);
                            vPOI_PNT.PntSource = strSource;

                            try {
                                objAlign.StationOffset(cogoPnt.Easting, cogoPnt.Northing, ref dblStation, ref dblOffset);
                            }
                            catch (Autodesk.Civil.PointNotOnEntityException) {
                                dblStation = 0.0;
                            }

                            vPOI_PNT.OFFSET    = System.Math.Round(dblOffset, 2);
                            vPOI_PNT.Desc0     = string.Format("{0} {1} {2}", cogoPnt.RawDescription, vPOI_PNT.OFFSET, vPOI_PNT.Elevation);
                            vPOI_PNT.PntSource = "TOPO";

                            varPOI_PNTs.Add(vPOI_PNT);
                        }
                    }
                }
                tr.Commit();
            }

            if (varPOI_PNTs.Count > 0)
            {
                dynamic sta = from data in varPOI_PNTs
                              orderby data.Station
                              select data;

                List <POI> t = new List <POI>();
                foreach (var p in sta)
                {
                    t.Add(p);
                }

                varPOI_PNTs = t;

                Misc.removeDuplicatePoints(ref varPOI_PNTs);

                sta = from data in varPOI_PNTs
                      orderby data.Station
                      select data;

                t = new List <POI>();
                foreach (var p in sta)
                {
                    t.Add(p);
                }

                varPOI = t;
            }
            else
            {
                return(false);
            }
            return(true);
        }
Пример #7
0
        getAlgnEntData(Alignment objAlign)
        {
            //-----------------------------------------------Collect alignment segment data-----------------------------------------------
            AlgnEntData        algnEntData     = default(AlgnEntData);
            List <AlgnEntData> algnEntDataList = new List <AlgnEntData>();           //data for alignment entities in order occurance in alignment not by ID

            AlignmentEntityCollection alignEnts = objAlign.Entities;
            int k = alignEnts.Count;

            foreach (AlignmentEntity alignEnt in alignEnts)
            {
                algnEntData = new AlgnEntData();
                if (alignEnt.EntityType == AlignmentEntityType.Arc)
                {
                    AlignmentArc alignEntArc = alignEnt as AlignmentArc;
                    try {
                        algnEntData.EntBefore = alignEntArc.EntityBefore;
                    }
                    catch (Autodesk.Civil.EntityNotFoundException) {
                        algnEntData.EntBefore = 0;
                    }
                    algnEntData.ID        = alignEntArc.EntityId;
                    algnEntData.Length    = alignEntArc.Length;
                    algnEntData.Radius    = alignEntArc.Radius;
                    algnEntData.Direction = 0;
                    algnEntData.ClockWise = alignEntArc.Clockwise;
                    algnEntData.StaBeg    = alignEntArc.StartStation;
                    algnEntData.StaEnd    = alignEntArc.EndStation;
                    algnEntData.Type      = "Arc";
                    algnEntData.pnt2dBeg  = alignEntArc.StartPoint;
                    algnEntData.pnt2dEnd  = alignEntArc.EndPoint;
                }
                else if (alignEnt.EntityType == AlignmentEntityType.Line)
                {
                    AlignmentLine alignEntLine = alignEnt as AlignmentLine;
                    try {
                        algnEntData.EntBefore = alignEntLine.EntityBefore;
                    }
                    catch (Autodesk.Civil.EntityNotFoundException) {
                        algnEntData.EntBefore = 0;
                    }
                    algnEntData.ID        = alignEntLine.EntityId;
                    algnEntData.Length    = alignEntLine.Length;
                    algnEntData.Radius    = 0;
                    algnEntData.Direction = alignEntLine.Direction;
                    algnEntData.StaBeg    = alignEntLine.StartStation;
                    algnEntData.StaEnd    = alignEntLine.EndStation;
                    algnEntData.Type      = "Line";
                    algnEntData.pnt2dBeg  = alignEntLine.StartPoint;
                    algnEntData.pnt2dEnd  = alignEntLine.EndPoint;
                }
                algnEntDataList.Add(algnEntData);
            }

            for (int i = 0; i < algnEntDataList.Count - 1; i++)
            {
                AlgnEntData algnEnt0 = algnEntDataList[i];
                AlgnEntData algnEntX = algnEntDataList[i + 1];

                Vector2d v2d0 = algnEnt0.pnt2dEnd - algnEnt0.pnt2dBeg;
                Vector2d v2dX = algnEntX.pnt2dEnd - algnEntX.pnt2dBeg;

                double ang3pnts = Geom.getAngle3Points2d(algnEnt0.pnt2dBeg, algnEnt0.pnt2dEnd, algnEntX.pnt2dEnd);
                algnEnt0.AngDeflection = v2d0.getDeflectionAngle2Vectors(v2dX);
                if (Geom.testRight(algnEnt0.pnt2dBeg, algnEnt0.pnt2dEnd, algnEntX.pnt2dEnd) < 0)
                {
                    algnEnt0.AngDeflection *= -1;
                }

                algnEntDataList[i] = algnEnt0;
            }
            return(algnEntDataList);
        }
Пример #8
0
        changeAlignStartPoint()
        {
            //BEGIN: UPDATE PROFILE, TABLE, AND POIs

            AlgnData  algnData = new AlgnData();
            ObjectId  idAlign  = ObjectId.Null;
            Alignment objAlign = null;

            if (selectAlignment(idAlign))
            {
                objAlign = fStake.ACTIVEALIGN;
            }
            else
            {
                return;
            }

            objAlign = fStake.ACTIVEALIGN;
            AlignmentEntityCollection objAlignEnts = objAlign.Entities;

            //BEGIN: UPDATE PROFILE, TABLE, AND POIs
            double       dblLenAlign = objAlign.Length;
            PromptStatus ps;
            Point3d      varPnt = UserInput.getPoint("Select Desired Start Point", out ps, osMode: 0);

            double dblStation = 0, dblOffset = 0;

            idAlign.getAlignStaOffset(varPnt, ref dblStation, ref dblOffset);
            double dblStationStart = objAlign.StartingStation;
            double dblStationDelta = dblStation - dblStationStart;
            // if varPnt is out of range then dblStation returns ZERO

            Profile profFLOWLINE      = Prof.getProfile(idAlign, "FLOwLINE");
            ProfilePVICollection pvis = profFLOWLINE.PVIs;

            List <POI> varPOI_Temp = new List <POI>();

            foreach (ProfilePVI pvi in pvis)
            {
                POI poi = new POI {
                    Station = Math.roundDown3(pvi.Station), Elevation = pvi.Elevation
                };
                varPOI_Temp.Add(poi);
            }

            Debug.Print("varPOI_Temp Before");
            for (int i = 0; i < varPOI_Temp.Count; i++)
            {
                Debug.Print(varPOI_Temp[i].Station + "  " + varPOI_Temp[i].Elevation);
            }

            //adjust POI_Temp stationing

            for (int i = 0; i < varPOI_Temp.Count; i++)
            {
                POI poi = varPOI_Temp[i];
                if (poi.Station < dblStationDelta + dblStationStart)
                {
                    poi.Station = Math.roundDown3(dblLenAlign + varPOI_Temp[i].Station);
                }
                else
                {
                    poi.Station = Math.roundDown3(varPOI_Temp[i].Station - dblStationDelta);
                }
                varPOI_Temp[i] = poi;
            }

            List <POI> poiTmp       = new List <POI>();
            var        sortPOI_Temp = from t in varPOI_Temp
                                      orderby t.Station ascending
                                      select t;

            foreach (var t in sortPOI_Temp)
            {
                poiTmp.Add(t);
            }
            varPOI_Temp = poiTmp;

            int k = varPOI_Temp.Count;

            POI poitemp = varPOI_Temp[k - 1];

            poitemp.Elevation = varPOI_Temp[0].Elevation;
            varPOI_Temp[k]    = poitemp;

            Debug.Print("varPOI_Temp After");
            for (int i = 0; i < k; i++)
            {
                Debug.Print(varPOI_Temp[i].Station + "  " + varPOI_Temp[i].Elevation);
            }

            //END: UPDATE PROFILE, TABLE, AND POIs

            ObjectId idPoly = objAlign.GetPolyline();
            Polyline poly   = (Polyline)idPoly.getEnt();

            string   strAlignName = objAlign.Name;
            AlgnData aData;

            for (int j = 1; j < fStake.algnData.Count; j++)
            {
                aData = fStake.algnData[j];
                if (aData.AlignHandle == objAlign.Handle)
                {
                    break;
                }
            }

            objAlign.ReferencePointStation = 100.0;

            foreach (AlignmentEntity ent in objAlignEnts)
            {
                objAlignEnts.Remove(ent);
            }

            List <Vertex2d> v2ds = Conv.poly_Vertex2dList(idPoly);

            int p = 0;

            foreach (Vertex2d v in v2ds)
            {
                if (v.Position.IsEqualTo(varPnt, new Tolerance(0, 0)))
                {
                    break;
                }
                p++;
            }

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

            for (int i = p; i < v2ds.Count; i++)
            {
                v2dsNew.Add(v2ds[i]);
            }

            for (int i = 1; i < p; i++)
            {
                v2dsNew.Add(v2ds[i]);
            }
            v2dsNew.Add(v2ds[p]);

            int     lngID = 0;
            Point3d dblPntBeg = Pub.pnt3dO, dblPntEnd = Pub.pnt3dO, dblPntMid = Pub.pnt3dO;

            for (int i = 1; i < v2dsNew.Count; i++)
            {
                if (v2dsNew[i].Bulge == 0)
                {
                    dblPntBeg = v2dsNew[i - 1].Position;
                    dblPntEnd = v2dsNew[i = 0].Position;

                    AlignmentLine objAlignEntTan = objAlign.Entities.AddFixedLine(lngID, dblPntBeg, dblPntEnd);
                    lngID = objAlignEntTan.EntityId;
                }
                else
                {
                    dblPntBeg = v2dsNew[i - 1].Position;
                    dblPntEnd = v2dsNew[i = 0].Position;

                    int intDir = 0;

                    if (v2dsNew[i - 1].Bulge > 0)
                    {
                        intDir = 1;
                    }
                    else
                    {
                        intDir = -1;
                    }

                    Arc arc = (Arc)Arc.Create(IntPtr.Zero, true);
                    arc.StartPoint = dblPntBeg;
                    arc.EndPoint   = dblPntEnd;

                    Point3d pnt3dMidLC = dblPntBeg.getMidPoint3d(dblPntEnd);
                    double  lenLC      = dblPntBeg.getDistance(dblPntEnd);
                    double  dirLC      = dblPntBeg.getDirection(dblPntEnd);
                    double  lenM       = System.Math.Abs(lenLC / 2 * v2dsNew[i - 1].Bulge);
                    dblPntMid = pnt3dMidLC.traverse(dirLC + System.Math.PI / 2 * intDir, lenM);

                    AlignmentArc objAlignEntArc = objAlign.Entities.AddFixedCurve(lngID, dblPntBeg, dblPntMid, dblPntEnd);
                    lngID = objAlignEntArc.EntityId;
                }
            }

            objAlign.Update();
            objAlign.ReferencePoint        = varPnt.Convert2d(BaseObjs.xyPlane);
            objAlign.ReferencePointStation = System.Math.Round(100.0 + dblStationDelta, 3);

            //BEGIN: UPDATE PROFILE, TABLE, AND POIs
            List <POI> varpoi = fStake.POI_CALC;

            //POIs are updated when selectAlignment is executed

            //ADJUST POI STATIONING
            //need complete POIs for descriptions
            for (int i = 0; i < varpoi.Count; i++)
            {
                if (varpoi[i].Station < dblStationDelta + dblStationStart)
                {
                    varpoi[i].Station = Math.roundDown3(dblLenAlign + varpoi[i].Station);
                }
                else
                {
                    varpoi[i].Station = Math.roundDown3(varpoi[i].Station - dblStationDelta);
                }
            }

            varpoi = varpoi.sortPOIbyStation();

            int n = varpoi.Count;

            varpoi[0].DescX     = "BEG " + varpoi[0].Desc0;
            varpoi[n - 2].DescX = varpoi[n - 2].DescX.Replace("END", "").Trim();
            varpoi[n - 1].DescX = varpoi[n - 1].DescX.Replace("BEG", "END").Trim();

            if (fStake.ClassObj == "CURB")
            {
                Stake_AddProfile.makeProfile(idAlign, varPOI_Temp, "CURB", "ByLayout", true);
            }

            ObjectId idTable = Stake_Table.makeTable(idAlign, varpoi);

            Stake_Table.addTableData(idTable, varpoi);

            if (Stake_GetBC_EC.getBC_EC(idAlign, ref varpoi) == false)
            {
                return;
            }

            fStake.POI_CALC = varpoi;
            //END: UPDATE PROFILE, TABLE, AND POIs
        }
Пример #9
0
        private void cmdUpdate_Click(object sender, EventArgs e)
        {
            Control            cntrl;
            ControlCollection  cntrls   = (ControlCollection)this.Controls;
            List <AlgnEntData> algnData = new List <AlgnEntData>();
            int k = cntrls.Count;

            k = (k - 9) / 1 - 1;

            Object[,] varData = new object[k, 6];
            for (int i = 0; i < cntrls.Count; i++)
            {
                cntrl = cntrls[i];
                if (cntrl.Name.Contains("lbl"))
                {
                    int id  = int.Parse(cntrl.Name.Substring(4, 1));
                    int idx = id + 2;
                    varData[id, idx] = cntrl.Text;
                }
            }
            AlgnEntData aData;

            for (int i = 0; i < k; i++)
            {
                aData        = new AlgnEntData();
                aData.ID     = int.Parse(varData[i, 1].ToString());
                aData.Type   = varData[i, 2].ToString();
                aData.StaBeg = double.Parse(varData[i, 3].ToString());
                aData.StaEnd = double.Parse(varData[i, 4].ToString());
                aData.Length = double.Parse(varData[i, 5].ToString());
                aData.Radius = double.Parse(varData[i, 6].ToString());
                algnData.Add(aData);
            }

            Alignment align = (Alignment)idAlign.getEnt();
            AlignmentEntityCollection ents = align.Entities;
            bool changed = false;

            for (int i = 0; i < ents.Count; i++)
            {
                AlignmentEntity ent = ents[i];
                if (ent.EntityType == AlignmentEntityType.Arc)
                {
                    if (algnData[1].Radius == 0)
                    {
                        ents.Remove(ent);
                        changed = true;
                    }
                }
                else
                {
                    AlignmentArc arc = (AlignmentArc)ent;
                    if (!arc.Radius.Equals(algnData[i].Radius))
                    {
                        arc.Radius = algnData[i].Radius;
                        changed    = true;
                    }
                }
                if (changed)
                {
                    this.Close();
                    MNP_Align.editAlign(align.ObjectId);
                }
            }
        }
Пример #10
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);
        }
Пример #11
0
        getNestedPoints(ObjectId idAlign, ref List <POI> varpoi, BlockTableRecord objXRefDbModelSpace, string strSource)
        {
            Alignment objAlign = (Alignment)idAlign.getEnt();

            string strNameStakeObject = fStake.NameStakeObject;
            double dblToleranceLength = 0.15;

            double dblToleranceAngle = PI;

            Point2d varPntRef = objAlign.ReferencePoint;
            string  strFilter = "";

            if (strSource.Contains("GCAL")
                )
            {
                strFilter = "*CPNT*";
            }
            else
            {
                strFilter = "*";
            }

            List <string> strPntNums = new List <string>();
            double        dblStation = 0, dblOffset = 0;
            ResultBuffer  rb = null;

            TypedValue[] tvs = null;

            List <POI> varPOI_PNTs = new List <POI>();

            foreach (ObjectId id in objXRefDbModelSpace)
            {
                bool boolAdd = false;

                Entity objXRefObj = id.getEnt();

                if (objXRefObj is CogoPoint)
                {
                    CogoPoint objPnt = (CogoPoint)objXRefObj;
                    Debug.Print(objPnt.PointNumber.ToString());

                    if (objPnt.Layer.Contains(strFilter))
                    {
                        strPntNums.Add(objPnt.PointNumber.ToString());

                        if (strSource == "GCAL")
                        {
                            rb  = id.getXData("STAKE");
                            tvs = rb.AsArray();
                        }

                        objAlign.StationOffset(objPnt.Easting, objPnt.Northing, ref dblStation, ref dblOffset);

                        Debug.Print(objPnt.Easting + "," + objPnt.Northing);

                        Point2d pnt2d = new Point2d(objPnt.Location.X, objPnt.Location.Y);

                        if (System.Math.Abs(dblOffset) < dblToleranceLength)
                        {
                            if (dblStation >= objAlign.StartingStation && dblStation <= objAlign.EndingStation)
                            {
                                boolAdd = true;
                            }
                        }
                        else if (pnt2d.isEqual(varPntRef, dblToleranceLength))
                        {
                            Point3d pnt3d = new Point3d(objPnt.Easting, objPnt.Northing, 0);

                            double dblAngle1 = Math.roundDown3(pnt2d.getDirection(varPntRef));

                            AlignmentEntity objAlignEnt = objAlign.Entities.EntityAtId(objAlign.Entities.FirstEntity);

                            switch (objAlignEnt.EntityType)
                            {
                            case AlignmentEntityType.Arc:

                                AlignmentArc objAlignEntArc = (AlignmentArc)objAlignEnt;
                                double       dblangle2      = 0;
                                if (objAlignEntArc.Clockwise)
                                {
                                    dblangle2 = objAlignEntArc.StartDirection - PI / 2 + objAlignEntArc.Delta / 2;
                                }
                                else
                                {
                                    dblangle2 = objAlignEntArc.StartDirection + PI / 2 - objAlignEntArc.Delta / 2;
                                }

                                if (System.Math.Abs(dblAngle1 - dblangle2) < dblToleranceAngle)
                                {
                                    boolAdd    = true;
                                    dblStation = objAlign.StartingStation;
                                }
                                else if (System.Math.Abs(Math.roundDown3(dblAngle1 - 2 * PI) - dblangle2) < dblToleranceAngle)
                                {
                                    boolAdd    = true;
                                    dblStation = objAlign.StartingStation;
                                }

                                break;

                            case AlignmentEntityType.Line:

                                AlignmentLine objAlignEntTan = (AlignmentLine)objAlignEnt;

                                dblangle2 = Math.roundDown3((objAlignEntTan.Direction));

                                if (System.Math.Abs(dblAngle1 - dblangle2) < dblToleranceAngle)
                                {
                                    boolAdd    = true;
                                    dblStation = objAlign.StartingStation;
                                }

                                break;
                            }
                        }
                        else
                        {
                            boolAdd = false;
                        }
                    }

                    if (boolAdd == true)
                    {
                        POI varPOI_PNT = new POI();

                        varPOI_PNT.Station   = Math.roundDown3(dblStation);
                        varPOI_PNT.PntNum    = objPnt.PointNumber.ToString();
                        varPOI_PNT.Elevation = System.Math.Round(objPnt.Elevation, 3);

                        if (strSource != "WALLDESIGN")
                        {
                            varPOI_PNT.ClassObj = fStake.ClassObj;
                        }

                        varPOI_PNT.OFFSET    = System.Math.Round(dblOffset, 2);
                        varPOI_PNT.PntSource = strSource;

                        if (strSource == "GCAL")
                        {
                            try
                            {
                                if (isTG(objXRefDbModelSpace, tvs[1].Value.ToString().stringToHandle()))
                                {
                                    varPOI_PNT.Desc0 = "TG";
                                }
                            }
                            catch (System.Exception)
                            {
                                varPOI_PNT.Desc0 = "PNT";
                            }
                        }
                        else if (strSource == "WALLDESIGN")
                        {
                            objAlign.StationOffset(objPnt.Easting, objPnt.Northing, ref dblStation, ref dblOffset);
                            varPOI_PNT.OFFSET    = System.Math.Round(dblOffset, 2);
                            varPOI_PNT.Desc0     = string.Format("{0} {0} {2}", objPnt.RawDescription, varPOI_PNT.OFFSET, varPOI_PNT.Elevation);
                            varPOI_PNT.PntSource = "TOPO";
                        }
                        else
                        {
                            varPOI_PNT.Desc0 = "PNT";
                        }
                        varPOI_PNTs.Add(varPOI_PNT);
                    }
                }
            }

            if (varPOI_PNTs.Count > 0)
            {
                var sortSta = from p in varPOI_PNTs
                              orderby p.Station ascending
                              select p;

                List <POI> poiTmp = new List <POI>();
                foreach (var p in sortSta)
                {
                    poiTmp.Add(p);
                }

                Stake_Util.removeDuplicatePoints(ref poiTmp);

                varPOI_PNTs = poiTmp;

                if (strSource != "WALLDESIGN")
                {
                    fStake.POI_PNTs = varPOI_PNTs;
                }

                if (varPOI_PNTs[0].Desc0 != "NOTHING")
                {
                    for (int i = 0; i < varPOI_PNTs.Count; i++)
                    {
                        varpoi.Add(varPOI_PNTs[i]);
                    }
                }

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

                return(true);
            }
            return(false);
        }
Пример #12
0
        listAlignEnts(Alignment objAlign)
        {
            AlignmentEntity objAlignEnt    = default(AlignmentEntity);
            AlignmentLine   objAlignEntTan = default(AlignmentLine);
            AlignmentArc    objAlignEntArc = default(AlignmentArc);

            List <AlgnEntData> varAlignData  = null;
            List <AlgnEntData> varAlignDataX = null;

            int lngBefore = 0;

            AlignmentEntityCollection ents = objAlign.Entities;

            for (int i = 0; i < ents.Count; i++)
            {
                objAlignEnt = ents[i];

                AlgnEntData alignData = new AlgnEntData();
                if (objAlignEnt.EntityType == AlignmentEntityType.Arc)
                {
                    objAlignEntArc      = (AlignmentArc)objAlignEnt;
                    alignData.ID        = objAlignEntArc.EntityId;
                    alignData.Type      = "Arc";
                    alignData.StaBeg    = System.Math.Round(objAlignEntArc.StartStation, 2);
                    alignData.StaEnd    = System.Math.Round(objAlignEntArc.EndStation, 2);
                    alignData.Length    = System.Math.Round(objAlignEntArc.Length, 2);
                    alignData.Radius    = System.Math.Round(objAlignEntArc.Radius, 2);
                    alignData.EntBefore = objAlignEntArc.EntityBefore;

                    varAlignData.Add(alignData);
                }
                else if (objAlignEnt.EntityType == AlignmentEntityType.Line)
                {
                    objAlignEntTan      = (AlignmentLine)objAlignEnt;
                    alignData.ID        = objAlignEntTan.EntityId;
                    alignData.Type      = "Tangent";
                    alignData.StaBeg    = System.Math.Round(objAlignEntTan.StartStation, 2);
                    alignData.StaEnd    = System.Math.Round(objAlignEntTan.EndStation, 2);
                    alignData.Length    = System.Math.Round(objAlignEntTan.Length, 2);
                    alignData.Radius    = 0.0;
                    alignData.EntBefore = objAlignEntTan.EntityBefore;

                    varAlignData.Add(alignData);
                }
            }

            int n = -1;
            int k = 0;

            do
            {
                for (int i = 0; i < ents.Count; i++)
                {
                    if (varAlignData[i].EntBefore == lngBefore)
                    {
                        n += 1;                                         //n is index for new list
                        varAlignDataX[n] = varAlignData[i];
                        k = i;
                        break;
                    }
                }

                lngBefore = varAlignData[k].ID;
            }while (n < ents.Count);

            return(varAlignDataX);
        }
Пример #13
0
        getCardinals_Horizontal(ObjectId idAlign, ref List <POI> varpoi)
        {
            Alignment objAlign = (Alignment)idAlign.getEnt();
            //BEGIN HORIZONTAL CARDINALS
            AlignmentEntityCollection objAlignEnts = objAlign.Entities;
            AlignmentEntity           objAlignEnt  = objAlignEnts[0];

            //GET BEG AND END OF FIRST SEGMENT - THEN GET END OF FOLLOWING SEGMENTS
            switch (objAlignEnt.EntityType)
            {
            case AlignmentEntityType.Arc:
                AlignmentArc objAlignEntArc = (AlignmentArc)objAlignEnt;
                POI          poi            = new POI();
                poi.Station  = Math.roundDown3((objAlignEntArc.StartStation));
                poi.Desc0    = "HC";
                poi.ClassObj = fStake.ClassObj;
                varpoi.Add(poi);

                poi          = new POI();
                poi.Station  = Math.roundDown3((objAlignEntArc.EndStation));
                poi.Desc0    = "HC";
                poi.ClassObj = fStake.ClassObj;
                varpoi.Add(poi);
                break;

            case AlignmentEntityType.Line:
                AlignmentLine objAlignEntTan = (AlignmentLine)objAlignEnt;
                poi          = new POI();
                poi.Station  = Math.roundDown3((objAlignEntTan.StartStation));
                poi.Desc0    = "HC";
                poi.ClassObj = fStake.ClassObj;
                varpoi.Add(poi);

                poi          = new POI();
                poi.Station  = Math.roundDown3((objAlignEntTan.EndStation));
                poi.Desc0    = "HC";
                poi.ClassObj = fStake.ClassObj;
                varpoi.Add(poi);
                break;
            }

            POI vpoi = new POI();

            if (objAlignEnts.Count > 1)
            {
                for (int i = 1; i <= objAlignEnts.Count - 1; i++)
                {
                    objAlignEnt = objAlignEnts[i];

                    vpoi = new POI();
                    switch (objAlignEnt.EntityType)
                    {
                    case AlignmentEntityType.Arc:
                        AlignmentArc objAlignEntArc = (AlignmentArc)objAlignEnt;
                        vpoi.Station  = Math.roundDown3((objAlignEntArc.EndStation));
                        vpoi.Desc0    = "HC";
                        vpoi.ClassObj = fStake.ClassObj;
                        break;

                    case AlignmentEntityType.Line:
                        AlignmentLine objAlignEntTan = (AlignmentLine)objAlignEnt;
                        vpoi.Station  = Math.roundDown3((objAlignEntTan.EndStation));
                        vpoi.Desc0    = "HC";
                        vpoi.ClassObj = fStake.ClassObj;

                        break;
                    }
                    varpoi.Add(vpoi);
                }
            }
            //END HORIZONTAL CARDINALS
        }
Пример #14
0
        getBC_EC(ObjectId idAlign, ref List <POI> varpoi)
        {
            bool      boolExists = false;
            Profile   objProfile = null;
            Alignment objAlign   = (Alignment)idAlign.getEnt();

            try
            {
                objProfile = Prof.getProfile(idAlign, "FLOWLINE");
            }
            catch (System.Exception)
            {
                objProfile = Prof.getProfile(idAlign, "STAKE");
            }

            string strClass = fStake.ClassObj;

            AlignmentEntityCollection objAlignEnts = objAlign.Entities;
            bool isRightHand = false;

            if (objAlignEnts.Count > 1)
            {
                for (int i = 0; i < objAlignEnts.Count; i++)
                {
                    AlignmentEntity objAlignEnt = objAlignEnts[i];

                    if (objAlignEnt.EntityType == AlignmentEntityType.Arc)
                    {
                        boolExists = false;

                        AlignmentArc objAlignEntArc = (AlignmentArc)objAlignEnt;

                        isRightHand = !(objAlignEntArc.Clockwise);
                        double dblStationBC = System.Math.Round(objAlignEntArc.StartStation, 3);

                        int x = 0;
                        for (int j = 0; j < varpoi.Count; j++)
                        {
                            if (System.Math.Abs(varpoi[j].Station - dblStationBC) < 0.05)
                            {
                                boolExists = true;
                                x          = j;
                                break;
                            }
                        }

                        double  dblBulge     = 0;
                        double  dblAngDirCen = objAlignEntArc.StartPoint.getDirection(objAlignEntArc.CenterPoint);//direction to center of arc
                        double  dblAngDelta  = objAlignEntArc.Delta;
                        double  dblRadius    = System.Math.Round(objAlignEntArc.Radius, 2);
                        Point2d dblPntCen    = objAlignEntArc.CenterPoint;

                        if (boolExists)
                        {
                            dblBulge = System.Math.Tan(objAlignEntArc.Delta / 4);

                            if (objAlignEntArc.Clockwise)
                            {
                                dblBulge = dblBulge * -1.0;
                            }

                            POI vpoi = varpoi[x];

                            vpoi.Station = Math.roundDown3(dblStationBC);
                            if (vpoi.Desc0 == "EC")
                            {
                                vpoi.Desc0 = "PCC";
                            }
                            else
                            {
                                vpoi.Desc0 = "BC";
                            }
                            vpoi.AngDir      = dblAngDirCen;
                            vpoi.isRightHand = isRightHand;
                            vpoi.Bulge       = dblBulge;
                            vpoi.Radius      = dblRadius;
                            vpoi.CenterPnt   = new Point3d(dblPntCen.X, dblPntCen.Y, 0);

                            varpoi[x] = vpoi;
                        }
                        else
                        {
                            string strDesc = "BC";
                            double dblElev = 0;

                            try
                            {
                                dblElev = objProfile.ElevationAt(dblStationBC);
                            }
                            catch (System.Exception)
                            {
                                try
                                {
                                    dblElev = objProfile.ElevationAt(dblStationBC + 0.05);
                                }
                                catch (System.Exception)
                                {
                                    idAlign.delete();
                                    Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(string.Format("Design Point not found at beginning of Arc @ {0:###+00.00} - revise and retry - exiting", dblStationBC));
                                    return(false);
                                }
                            }

                            if (dblElev != 0)
                            {
                                dblBulge = System.Math.Tan(objAlignEntArc.Delta / 4);
                                if (objAlignEntArc.Clockwise)
                                {
                                    dblBulge = dblBulge * -1.0;
                                }
                                dblRadius = System.Math.Round(objAlignEntArc.Radius, 2);

                                POI vpoi = new POI();
                                vpoi.Station     = dblStationBC;
                                vpoi.Desc0       = strDesc;
                                vpoi.ClassObj    = strClass;
                                vpoi.AngDelta    = dblAngDelta;
                                vpoi.AngDir      = dblAngDirCen;
                                vpoi.isRightHand = isRightHand;
                                vpoi.Elevation   = dblElev;
                                vpoi.Bulge       = dblBulge;
                                vpoi.Radius      = dblRadius;
                                vpoi.CenterPnt   = new Point3d(dblPntCen.X, dblPntCen.Y, 0);

                                varpoi.Add(vpoi);
                                varpoi = varpoi.sortPOIbyStation();
                            }
                        }

                        boolExists = false;

                        double dblStationEC = System.Math.Round(objAlignEntArc.EndStation, 3);

                        x = 0;
                        for (int j = 0; j < varpoi.Count; j++)
                        {
                            if (System.Math.Abs(varpoi[j].Station - dblStationEC) < 0.05)
                            {
                                boolExists = true;
                                x          = j;
                                break;
                            }
                        }

                        dblAngDirCen = objAlignEntArc.EndPoint.getDirection(objAlignEntArc.CenterPoint);

                        if (boolExists)
                        {
                            POI vpoi = varpoi[x];
                            vpoi.Station     = Math.roundDown3(dblStationEC);
                            vpoi.Desc0       = "EC";
                            vpoi.AngDir      = dblAngDirCen;
                            vpoi.isRightHand = isRightHand;
                            vpoi.Bulge       = dblBulge;
                            vpoi.Radius      = dblRadius;
                            varpoi[x]        = vpoi;
                        }
                        else
                        {
                            string strDesc = "EC";
                            double dblElev = 0;

                            try
                            {
                                dblElev = objProfile.ElevationAt(dblStationEC);
                            }
                            catch (System.Exception)
                            {
                                dblElev = objProfile.ElevationAt(dblStationBC - 0.05);
                            }

                            POI vpoi = new POI();
                            vpoi.Station     = dblStationEC;
                            vpoi.Desc0       = strDesc;
                            vpoi.ClassObj    = strClass;
                            vpoi.AngDelta    = dblAngDelta;
                            vpoi.AngDir      = dblAngDirCen;
                            vpoi.isRightHand = isRightHand;
                            vpoi.Elevation   = dblElev;
                            vpoi.Bulge       = dblBulge;
                            vpoi.Radius      = dblRadius;

                            varpoi.Add(vpoi);

                            varpoi = varpoi.sortPOIbyStation();
                        }
                    }
                }
            }

            return(true);
        }
Пример #15
0
        makePipeNetwork(ObjectId idAlign, string nameNetwork, string pipeType)
        {
            string pntDesc = fMNP.pntDesc;

            Point3d pnt3dPick = Pub.pnt3dO;

            if (idAlign == ObjectId.Null)
            {
                Autodesk.AutoCAD.DatabaseServices.Entity ent = Select.selectEntity(typeof(Alignment), "Select Alignment: ", "Selected object was not an alignment. Try again: ", out pnt3dPick);
                idAlign = ent.ObjectId;
            }

            Network            net   = null;
            ObjectIdCollection ids   = CivilApplication.ActiveDocument.GetPipeNetworkIds();
            ObjectId           idNet = ObjectId.Null;

            if (ids.Count == 0)
            {
                idNet = Network.Create(CivilApplication.ActiveDocument, ref nameNetwork);
            }
            else
            {
                for (int i = 0; i < ids.Count; i++)
                {
                    net = (Network)ids[i].getEnt();
                    //if (net.Name == nameNetwork){
                    //    string index = Align.getAlignIndex(nameNetwork);
                    //    nameNetwork = string.Format("{0}-{1}", nameNetwork, index);
                    //    break;
                    //}
                }
                idNet = Network.Create(CivilApplication.ActiveDocument, ref nameNetwork);
            }

            bool exists = false;

            Alignment align = (Alignment)idAlign.getEnt();
            AlignmentEntityCollection ents = align.Entities;
            TinSurface tinSurfDE           = Surf.getTinSurface("CPNT-ON", out exists);

            List <AlgnEntData> algnData = MNP_Align.sortAlignEnts(align);
            List <string>      hPipe    = new List <string>();
            List <ObjectId>    idsCgPnt = new List <ObjectId>();

            ObjectId idPipe, idPipeSize, idStruct, idStructSize;

            using (Transaction tr = BaseObjs.startTransactionDb())
            {
                net = (Network)tr.GetObject(idNet, OpenMode.ForWrite);
                net.ReferenceAlignmentId = idAlign;
                net.ReferenceSurfaceId   = Surf.getTinSurface("CPNT-ON", out exists).ObjectId;

                ObjectId  idPartsList = CivilApplication.ActiveDocument.Styles.PartsListSet["Standard"];
                PartsList partsList   = (PartsList)tr.GetObject(idPartsList, OpenMode.ForRead);

                idPipe = partsList["Concrete Pipe"];
                PartFamily partFamily = (PartFamily)tr.GetObject(idPipe, OpenMode.ForWrite);

                idPipeSize = partFamily[0];

                PartSize        partSize = (PartSize)tr.GetObject(idPipeSize, OpenMode.ForRead);
                PartDataRecord  pdr      = partSize.SizeDataRecord;
                PartDataField[] pdf      = pdr.GetAllDataFields();

                for (int i = 0; i < pdf.Length; i++)
                {
                    System.Diagnostics.Debug.Print(string.Format("{0}: {1}", pdf[i].Description, pdf[i].Value.ToString()));
                }

                idStruct     = partsList["Rectangular Structure Slab Top Rectangular Frame"];
                partFamily   = (PartFamily)tr.GetObject(idStruct, OpenMode.ForWrite);
                idStructSize = partFamily[0];

                double depth = -6, slope = 0, dZ = 0, top = 0;
                double diam = double.Parse(pdf[0].Value.ToString()) / 12;

                ObjectId idPipeNew = ObjectId.Null;

                AlignmentEntity ent    = null;
                Structure       sPrev  = null;
                uint            pntNum = 0;

                ObjectId     idCgPntBeg, idCgPntEnd, idCgPntPrev = ObjectId.Null;
                TypedValue[] tvs;

                for (int i = 0; i < algnData.Count; i++)
                {
                    if (algnData.Count == 1)
                    {
                        ent = ents[0];
                    }
                    else
                    {
                        ent = ents.EntityAtId(algnData[i].ID);
                    }

                    ObjectId  idStructNew = ObjectId.Null;
                    Structure s           = null;
                    Pipe      p           = null;

                    if (ent.EntityType == AlignmentEntityType.Line)
                    {
                        AlignmentLine line     = (AlignmentLine)ent;
                        Point2d       pnt2dBeg = line.StartPoint;
                        Point2d       pnt2dEnd = line.EndPoint;

                        try
                        {
                            top = tinSurfDE.FindElevationAtXY(pnt2dBeg.X, pnt2dBeg.Y) + depth;
                        }
                        catch (System.Exception)
                        {
                            Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Pipe endpoint is beyond limit of design surface");
                            return;
                        }

                        Point3d pnt3dBeg = new Point3d(pnt2dBeg.X, pnt2dBeg.Y, top);

                        try
                        {
                            top = tinSurfDE.FindElevationAtXY(pnt2dEnd.X, pnt2dEnd.Y) + depth;
                        }
                        catch (System.Exception)
                        {
                            Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Pipe endpoint is beyond limit of design surface");
                            return;
                        }

                        Point3d pnt3dEnd = new Point3d(pnt2dEnd.X, pnt2dEnd.Y, top);

                        LineSegment3d seg3d = new LineSegment3d(pnt3dBeg, pnt3dEnd);

                        net.AddLinePipe(idPipe, idPipeSize, seg3d, ref idPipeNew, true);

                        p = (Pipe)idPipeNew.getEnt();
                        p.AddToProfileView(fMNP.idProfileView);

                        ObjectId idPart = getProfileViewPart();

                        slope = pnt3dBeg.getSlope(pnt3dEnd);

                        dZ = diam / (2 * (System.Math.Cos(System.Math.Atan(System.Math.Abs(slope)))));

                        if (i == 0)
                        {
                            pnt3dBeg = new Point3d(pnt3dBeg.X, pnt3dBeg.Y, pnt3dBeg.Z - dZ);
                            pnt3dEnd = new Point3d(pnt3dEnd.X, pnt3dEnd.Y, pnt3dEnd.Z - dZ);

                            idCgPntBeg = pnt3dBeg.setPoint(out pntNum, pntDesc);
                            idsCgPnt.Add(idCgPntBeg);

                            idCgPntEnd = pnt3dEnd.setPoint(out pntNum, pntDesc);
                            idsCgPnt.Add(idCgPntEnd);

                            idCgPntPrev = idCgPntEnd;

                            tvs = new TypedValue[3];
                            tvs.SetValue(new TypedValue(1001, apps.lnkMNP), 0);
                            tvs.SetValue(new TypedValue(1005, idCgPntBeg.getHandle().ToString()), 1);
                            tvs.SetValue(new TypedValue(1005, idCgPntEnd.getHandle().ToString()), 2);

                            //idPart.setXData(rb, apps.lnkMNP);
                            idPipeNew.setXData(tvs, apps.lnkMNP);

                            net.AddStructure(idStruct, idStructSize, pnt3dBeg, 0, ref idStructNew, true);
                            s = (Structure)idStructNew.getEnt();
                            s.AddToProfileView(fMNP.idProfileView);
                            s.ConnectToPipe(idPipeNew, ConnectorPositionType.Start);

                            net.AddStructure(idStruct, idStructSize, pnt3dEnd, 0, ref idStructNew, true);
                            s = (Structure)idStructNew.getEnt();
                            s.AddToProfileView(fMNP.idProfileView);
                            s.ConnectToPipe(idPipeNew, ConnectorPositionType.End);

                            sPrev = s;
                            hPipe.Add(idPipeNew.getHandle().ToString());
                        }
                        else
                        {
                            pnt3dEnd   = new Point3d(pnt3dEnd.X, pnt3dEnd.Y, pnt3dEnd.Z - dZ);
                            idCgPntEnd = pnt3dEnd.setPoint(out pntNum, pntDesc);
                            idsCgPnt.Add(idCgPntEnd);

                            tvs = new TypedValue[3];
                            tvs.SetValue(new TypedValue(1001, apps.lnkMNP), 0);
                            tvs.SetValue(new TypedValue(1005, idCgPntPrev.getHandle().ToString()), 1);
                            tvs.SetValue(new TypedValue(1005, idCgPntEnd.getHandle().ToString()), 2);

                            //idPart.setXData(rb, apps.lnkMNP);
                            idPipeNew.setXData(tvs, apps.lnkMNP);

                            idCgPntPrev = idCgPntEnd;

                            net.AddStructure(idStruct, idStructSize, pnt3dEnd, 0, ref idStructNew, true);
                            s = (Structure)idStructNew.getEnt();
                            s.AddToProfileView(fMNP.idProfileView);
                            sPrev.ConnectToPipe(idPipeNew, ConnectorPositionType.Start);
                            s.ConnectToPipe(idPipeNew, ConnectorPositionType.End);

                            sPrev = s;
                            hPipe.Add(idPipeNew.getHandle().ToString());
                        }
                    }
                    else if (ent.EntityType == AlignmentEntityType.Arc)
                    {
                        AlignmentArc arc    = (AlignmentArc)ent;
                        double       radius = arc.Radius;

                        Point2d pnt2dBeg = arc.StartPoint;
                        Point2d pnt2dEnd = arc.EndPoint;

                        try
                        {
                            top = tinSurfDE.FindElevationAtXY(pnt2dBeg.X, pnt2dBeg.Y) + depth;
                        }
                        catch (System.Exception)
                        {
                            Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Pipe endpoint is beyond limit of design surface");
                            return;
                        }
                        Point3d pnt3dBeg = new Point3d(pnt2dBeg.X, pnt2dBeg.Y, top);

                        try
                        {
                            top = tinSurfDE.FindElevationAtXY(pnt2dEnd.X, pnt2dEnd.Y) + depth;
                        }
                        catch (System.Exception)
                        {
                            Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Pipe endpoint is beyond limit of design surface");
                            return;
                        }

                        IntPtr  iptr     = (IntPtr)0;
                        Point3d pnt3dEnd = new Point3d(pnt2dEnd.X, pnt2dEnd.Y, top);

                        Arc a = new Arc();
                        a.Radius     = arc.Radius;
                        a.StartPoint = new Point3d(pnt2dBeg.X, pnt2dBeg.Y, 0);
                        a.EndPoint   = new Point3d(pnt2dEnd.X, pnt2dEnd.Y, 0);
                        a.Center     = new Point3d(arc.CenterPoint.X, arc.CenterPoint.Y, 0);

                        Curve3d c = (Curve3d)a.GetGeCurve();

                        net.AddCurvePipe(idPipe, idPipeSize, c, arc.Clockwise, ref idPipeNew, true);

                        p = (Pipe)idPipeNew.getEnt();
                        p.AddToProfileView(fMNP.idProfileView);

                        ObjectId idPart = getProfileViewPart();
                        slope = (pnt3dEnd.Z - pnt3dBeg.Z) / arc.Length;

                        dZ = diam / (2 * (System.Math.Cos(System.Math.Atan(System.Math.Abs(slope)))));

                        if (i == 0)
                        {
                            pnt3dBeg = new Point3d(pnt3dBeg.X, pnt3dBeg.Y, pnt3dBeg.Z - dZ);
                            pnt3dEnd = new Point3d(pnt3dEnd.X, pnt3dEnd.Y, pnt3dEnd.Z - dZ);

                            idCgPntBeg = pnt3dBeg.setPoint(out pntNum, pntDesc);
                            idsCgPnt.Add(idCgPntBeg);

                            idCgPntEnd = pnt3dEnd.setPoint(out pntNum, pntDesc);
                            idsCgPnt.Add(idCgPntEnd);

                            tvs = new TypedValue[3];
                            tvs.SetValue(new TypedValue(1001, apps.lnkMNP), 0);
                            tvs.SetValue(new TypedValue(1005, idCgPntBeg.getHandle().ToString()), 1);
                            tvs.SetValue(new TypedValue(1005, idCgPntEnd.getHandle().ToString()), 2);

                            //idPart.setXData(rb, apps.lnkMNP);
                            idPipeNew.setXData(tvs, apps.lnkMNP);

                            net.AddStructure(idStruct, idStructSize, pnt3dBeg, 0, ref idStructNew, true);
                            s = (Structure)tr.GetObject(idStructNew, OpenMode.ForWrite);
                            s.AddToProfileView(fMNP.idProfileView);
                            s.ConnectToPipe(idPipeNew, ConnectorPositionType.Start);

                            net.AddStructure(idStruct, idStructSize, pnt3dBeg, 0, ref idStructNew, true);
                            s = (Structure)tr.GetObject(idStructNew, OpenMode.ForWrite);
                            s.AddToProfileView(fMNP.idProfileView);
                            s.ConnectToPipe(idPipeNew, ConnectorPositionType.End);
                            sPrev = s;
                            hPipe.Add(idPipeNew.getHandle().ToString());
                        }
                        else
                        {
                            pnt3dEnd = new Point3d(pnt3dEnd.X, pnt3dEnd.Y, pnt3dEnd.Z - dZ);

                            idCgPntEnd = pnt3dEnd.setPoint(out pntNum, pntDesc);
                            idsCgPnt.Add(idCgPntEnd);

                            tvs = new TypedValue[3];
                            tvs.SetValue(new TypedValue(1001, apps.lnkMNP), 0);
                            tvs.SetValue(new TypedValue(1005, idCgPntPrev.getHandle().ToString()), 1);
                            tvs.SetValue(new TypedValue(1005, idCgPntEnd.getHandle().ToString()), 2);

                            //idPart.setXData(rb, apps.lnkMNP);
                            idPipeNew.setXData(tvs, apps.lnkMNP);

                            idCgPntPrev = idCgPntEnd;

                            net.AddStructure(idStruct, idStructSize, pnt3dBeg, 0, ref idStructNew, true);
                            s = (Structure)tr.GetObject(idStructNew, OpenMode.ForWrite);
                            s.AddToProfileView(fMNP.idProfileView);
                            sPrev.ConnectToPipe(idPipeNew, ConnectorPositionType.Start);
                            s.ConnectToPipe(idPipeNew, ConnectorPositionType.End);
                            sPrev = s;
                            hPipe.Add(idPipeNew.getHandle().ToString());
                        }
                    }
                }
                tr.Commit();
            }

            hPipe.Insert(0, "-1");
            hPipe.Add("-1");

            for (int i = 0; i < idsCgPnt.Count; i++)
            {
                TypedValue[] tvs = new TypedValue[3];
                tvs.SetValue(new TypedValue(1001, apps.lnkMNP), 0);
                tvs.SetValue(new TypedValue(1005, hPipe[i]), 1);
                tvs.SetValue(new TypedValue(1005, hPipe[i + 1]), 2);
                idsCgPnt[i].setXData(tvs, apps.lnkMNP);
            }
        }