示例#1
0
        stakeMISC(string strCommand)
        {
            TinSurface objSurface = fStake.SurfaceCPNT;

            string       strLayer = fMisc.tbxLayer.Text;
            string       strDesc  = fMisc.tbxDesc0.Text + fMisc.tbxDescription.Text;
            PromptStatus ps;
            bool         escape;

            switch (strCommand)
            {
            case "InLine_Center":

                BaseObjs.acadActivate();

                Point3d pnt3dTar = UserInput.getPoint("\nSelect Target Point for Staking: ", out ps, osMode: 8);

                Point3d pnt3dPick = UserInput.getPoint("\nSelect Directional Point(any XY location): ", pnt3dTar, out escape, out ps, osMode: 8);

                double  dblAngDir1 = pnt3dTar.getDirection(pnt3dPick);
                Point3d pnt3dPolar = pnt3dTar.traverse(dblAngDir1, double.Parse(fMisc.cbxOffset.Text));

                double  dblElev = objSurface.FindElevationAtXY(pnt3dTar.X, pnt3dTar.Y);
                Point3d pnt3d   = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev);

                Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);

                pnt3dPolar = pnt3dTar.traverse(dblAngDir1 + PI, double.Parse(fMisc.cbxOffset.Text));

                pnt3dPolar = pnt3dTar.traverse(dblAngDir1, double.Parse(fMisc.cbxOffset.Text));

                Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);

                break;

            case "InLine_Direction":

                BaseObjs.acadActivate();

                pnt3dTar = UserInput.getPoint("\nSelect Target Point for Staking: ", out ps, osMode: 8);

                pnt3dPick = UserInput.getPoint("\nSelect Directional Point(any XY location): ", pnt3dTar, out escape, out ps, osMode: 8);

                dblAngDir1 = pnt3dTar.getDirection(pnt3dPick);

                pnt3dPolar = pnt3dTar.traverse(dblAngDir1, double.Parse(fMisc.cbxOffset.Text));

                dblElev = objSurface.FindElevationAtXY(pnt3dTar.X, pnt3dTar.Y);
                pnt3d   = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev);

                Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);

                if (double.Parse(fMisc.cbxOffsetDir.Text) == 0)
                {
                    Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Direction Offset is 0 - revise....exiting");
                    return;
                }

                pnt3dPolar = pnt3dTar.traverse(dblAngDir1, double.Parse(fMisc.cbxOffset.Text) + double.Parse(fMisc.cbxOffsetDir.Text));

                pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev);

                strDesc = string.Format("{0}' O/S {1} @", double.Parse(fMisc.cbxOffset.Text) +
                                        double.Parse(fMisc.cbxOffsetDir.Text), fMisc.cbxObjType.Text);

                Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);

                break;

            case "Proj2Curb":

                BaseObjs.acadActivate();

                pnt3dTar = UserInput.getPoint("\nSelect Target Point for Staking: ", out ps, osMode: 8);
                string xRefPath = "";
                Entity ent      = xRef.getEntity("\nSelect Adjacent Curb:", out escape, out xRefPath);

                Point3d pnt3dInt0 = getRadial_Perpendicular(pnt3dTar, ent);

                ent.ObjectId.delete();

                dblAngDir1 = pnt3dTar.getDirection(pnt3dInt0);

                pnt3dPolar = pnt3dInt0.traverse(dblAngDir1 + PI / 2, double.Parse(fMisc.cbxOffset.Text));

                dblElev = objSurface.FindElevationAtXY(pnt3dInt0.X, pnt3dInt0.Y);
                dblElev = dblElev + double.Parse(fMisc.cbxCurbHeight.Text) / 12;
                pnt3d   = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev);

                Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);

                pnt3dPolar = pnt3dInt0.traverse(dblAngDir1 - PI / 2, double.Parse(fMisc.cbxOffset.Text));

                pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev);

                Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);

                break;

            case "Proj2Bldg":

                BaseObjs.acadActivate();

                pnt3dTar = UserInput.getPoint("\nSelect Target Point for Staking: ", out ps, osMode: 8);
                Point3d pnt3dRef1 = UserInput.getPoint("Pick Point Perpendicular to Building: ", pnt3dTar, out escape, out ps, osMode: 8);
                dblAngDir1 = pnt3dTar.getDirection(pnt3dRef1);

                pnt3dPolar = pnt3dRef1.traverse(dblAngDir1 + PI / 2, double.Parse(fMisc.cbxOffset.Text));

                dblElev = objSurface.FindElevationAtXY(pnt3dRef1.X, pnt3dRef1.Y);
                pnt3d   = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev);
                Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);

                pnt3dPolar = pnt3dRef1.traverse(dblAngDir1 - PI / 2, double.Parse(fMisc.cbxOffset.Text));

                pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev);
                Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);

                break;

            case "AP":

                BaseObjs.acadActivate();

                pnt3dTar = UserInput.getPoint("\nSelect Target Point for Staking: ", out ps, osMode: 8);

                pnt3dRef1 = UserInput.getPoint("\nSelect Adjacent Angle Point1: ", out ps, osMode: 1);
                Point3d pnt3dRef2  = UserInput.getPoint("\nSelect Adjacent Angle Point2: ", out ps, osMode: 1);
                Point3d varPntPick = UserInput.getPoint("\nSelect Side: ", out ps, osMode: 0);

                double dblAngDelta = Geom.getAngle3Points(pnt3dRef1, pnt3dTar, pnt3dRef2);

                dblAngDir1 = pnt3dRef1.getDirection(pnt3dTar);
                double dblAngDir2 = pnt3dTar.getDirection(pnt3dRef2);

                bool isRightHand = (pnt3dTar.isRightSide(pnt3dRef1, pnt3dRef2)) ? true : false;

                pnt3dPolar = varPntPick.traverse(dblAngDir1 + PI / 2, 10);

                List <Point3d> pnts3d1 = new List <Point3d> {
                    pnt3dRef1, pnt3dTar
                };
                List <Point3d> pnts3d2 = new List <Point3d> {
                    varPntPick, pnt3dPolar
                };

                List <Point3d> pnts3dInt = pnts3d1.intersectWith(pnts3d2, false, extend.both);

                if (pnts3dInt.Count == 0)
                {
                    return;
                }
                bool boolHit = false, boolIN = false;
                int  intSide = 0;

                //PICK POINT ADJACENT TO FIRST SEGMENT
                if (pnt3dTar.isRightSide(pnt3dRef1, varPntPick))
                {
                    //CCW
                    if (isRightHand)
                    {
                        boolIN  = true;
                        intSide = -1;
                        //CW
                    }
                    else
                    {
                        boolIN  = false;
                        intSide = -1;
                    }
                    boolHit = true;
                }
                else
                {     //RIGHT SIDE OF FIRST SEGMENT
                    //CCW
                    if (isRightHand)
                    {
                        boolIN  = false;
                        intSide = 1;
                    }
                    else
                    {
                        boolIN = true;
                        //CW
                        intSide = 1;
                    }
                    boolHit = true;
                }

                if (!boolHit)
                {
                    pnt3dPolar = varPntPick.traverse(dblAngDir2 + PI / 2, 10);
                    pnts3d1    = new List <Point3d> {
                        pnt3dRef2, pnt3dTar
                    };
                    pnts3d2 = new List <Point3d> {
                        varPntPick, pnt3dPolar
                    };

                    List <Point3d> pnts3dInt2 = pnts3d1.intersectWith(pnts3d2, false, extend.both);

                    //PICK POINT ADJACENT TO SECOND SEGMENT

                    //LEFT SIDE OF SECOND SEGMENT
                    if (pnt3dRef2.isRightSide(pnt3dTar, varPntPick))
                    {
                        //CCW
                        if (isRightHand)
                        {
                            boolIN  = true;
                            intSide = -1;
                            //CW
                        }
                        else
                        {
                            boolIN  = false;
                            intSide = -1;
                        }
                        //RIGHT SIDE OF SECOND SEGMENT
                    }
                    else
                    {
                        //CCW
                        if (isRightHand)
                        {
                            boolIN  = false;
                            intSide = 1;
                            //CW
                        }
                        else
                        {
                            boolIN  = true;
                            intSide = 1;
                        }
                    }
                }

                if (boolIN)
                {
                    pnt3dPolar = pnt3dTar.traverse(dblAngDir2 + dblAngDelta / 2 * intSide * -1, Convert.ToDouble(fMisc.cbxOffset.Text) / System.Math.Sin(dblAngDelta / 2));
                    dblElev    = objSurface.FindElevationAtXY(pnt3dTar.X, pnt3dTar.Y);
                    pnt3d      = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev);
                    Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);
                }
                else
                {
                    pnt3dPolar = pnt3dTar.traverse(dblAngDir2 + ((3 * PI / 2 - dblAngDelta) * intSide * -1), Convert.ToDouble((fMisc.cbxOffset).Text));
                    //point opposite begin point of next segment
                    dblElev = objSurface.FindElevationAtXY(pnt3dTar.X, pnt3dTar.Y);

                    pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev);
                    Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);

                    pnt3dPolar = pnt3dTar.traverse(dblAngDir2 + (PI / 2 * intSide * -1), Convert.ToDouble((fMisc.cbxOffset).Text));
                    //point opposite begin point of next segment

                    pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev);
                    Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc);
                }

                break;
            }
        }
示例#2
0
        stakeGridPoints(ObjectId idAlign, List <POI> varPOI_STAKE, double staBeg = 0, double staEnd = 0, int side = 0, long begNum = 30000)
        {
            Alignment objAlign = (Alignment)idAlign.getEnt();
            double    dblStation = 0, dblOffset = 0;

            if ((side == 0))
            {
                if (double.Parse(fGrid.tbxOffsetH.Text) != 0)
                {
                    PromptStatus ps;
                    bool         escape = true;

                    Point3d varPntPick = UserInput.getPoint("Select side to place stake points: <ESC to Cancel>", Pub.pnt3dO, out escape, out ps, osMode: 8);
                    if (escape)
                    {
                        return;
                    }

                    objAlign.StationOffset(varPntPick.X, varPntPick.Y, ref dblStation, ref dblOffset);

                    if (System.Math.Abs(dblOffset) > 20.0)
                    {
                        DialogResult varResponse = MessageBox.Show(string.Format("\nPoint selected is more than 20' from Alignment: {0} \nContinue?", objAlign.Name, MessageBoxButtons.YesNo));

                        if (varResponse == DialogResult.No)
                        {
                            return;
                        }
                    }
                    if (dblOffset < 0)
                    {
                        side = -1;
                    }
                    else
                    {
                        side = 1;
                    }
                    fStake.Side = side;
                }
                else
                {
                    fStake.Side = 1;
                }
            }
            else
            {
                fStake.Side = side;
            }

            fStake.STAKE_LAYER = fGrid.tbxOffsetH.Text + "-OS-" + objAlign.Name;

            dblOffset = double.Parse(fGrid.tbxOffsetH.Text);
            string strName = fStake.NameStakeObject;

            double dblStaBeg = Math.roundDown3((objAlign.StartingStation));
            double dblStaEnd = Math.roundDown3((objAlign.EndingStation));

            uint lngPntNumBeg = Stake_Util.getBegPntNum();

            fStake.NextPntNum = lngPntNumBeg;

            CogoPointCollection cgPnts = CivilApplication.ActiveDocument.CogoPoints;

            fStake.POI_STAKED = new List <POI>();

            //**********PROCESS varPOI_STAKE*********************
            for (int i = 0; i <= varPOI_STAKE.Count; i++)
            {
                if (varPOI_STAKE[i].DescX == "")
                {
                    POI vPOI_STAKE = varPOI_STAKE[i];
                    vPOI_STAKE.DescX = vPOI_STAKE.Desc0;
                    varPOI_STAKE[i]  = vPOI_STAKE;
                }

                if (i == varPOI_STAKE.Count - 1)
                {
                    break;
                }

                double dblElev = varPOI_STAKE[i].Elevation;

                switch (varPOI_STAKE[i].Desc0)
                {
                case "AP":

                    switch (side)
                    {
                    case 1:
                        //right side

                        //counterclockwise
                        if (varPOI_STAKE[i].isRightHand)
                        {
                            if (fGrid.optPBC.Checked)
                            {
                                Stake_Calc.doAnglePointOUT(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset);
                            }
                            else if (fGrid.optRBC.Checked)
                            {
                                Stake_Calc.doAnglePointOUT_RBC(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset);
                            }
                            //clockwise
                        }
                        else
                        {
                            Stake_Calc.doAnglePointIN(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset);
                        }

                        break;

                    case -1:
                        //left side

                        //counterclockwise
                        if (varPOI_STAKE[i].isRightHand)
                        {
                            Stake_Calc.doAnglePointIN(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset);
                            //clockwise
                        }
                        else
                        {
                            if (fGrid.optPBC.Checked)
                            {
                                Stake_Calc.doAnglePointOUT(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset);
                            }
                            else if (fGrid.optRBC.Checked)
                            {
                                Stake_Calc.doAnglePointOUT_RBC(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset);
                            }
                        }

                        break;
                    }

                    break;

                default:

                    string strDesc = varPOI_STAKE[i].DescX;
                    double dblEasting = 0, dblNorthing = 0;
                    try
                    {
                        objAlign.PointLocation(varPOI_STAKE[i].Station, dblOffset * side, ref dblEasting, ref dblNorthing);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        try
                        {
                            objAlign.PointLocation(varPOI_STAKE[i].Station - 0.01, dblOffset * side, ref dblEasting, ref dblNorthing);
                        }
                        catch (IndexOutOfRangeException)
                        {
                            objAlign.PointLocation(varPOI_STAKE[i].Station + 0.01, dblOffset * side, ref dblEasting, ref dblNorthing);
                        }
                    }

                    Point3d dblPnt = new Point3d(dblEasting, dblNorthing, varPOI_STAKE[i].Elevation);

                    string strOffset = dblOffset.ToString();
                    Stake_Calc.setOffsetPoint(dblPnt, strOffset, strName, strDesc, idAlign, varPOI_STAKE[i].Station);

                    break;
                }
            }

            List <POI> varPOI_STAKED = fStake.POI_STAKED;
            int        k             = varPOI_STAKED.Count - 1;

            uint lngPntNumEnd = uint.Parse(varPOI_STAKED[k].PntNum);

            TypedValue[] tvs = new TypedValue[4] {
                new TypedValue(1001, "STAKE"),
                new TypedValue(1071, lngPntNumBeg),
                new TypedValue(1071, lngPntNumEnd),
                new TypedValue(1000, fStake.STAKE_LAYER)
            };

            idAlign.setXData(tvs, "STAKE");

            CgPnt_Group.updatePntGroup("SPNT");

            Stake_UpdateProfile.updateProfile(idAlign, (fStake.POI_STAKED), "STAKE", true, "STAKED");

            bool     exists = false;
            ObjectId idDict = Dict.getNamedDictionary("STAKE_PNTS", out exists);

            List <Point3d> dblPnts = new List <Point3d>();
            Point3d        pnt3d   = Pub.pnt3dO;

            for (int p = 0; p < varPOI_STAKED.Count; p++)
            {
                ObjectId idPnt = BaseObjs._civDoc.CogoPoints.GetPointByPointNumber(uint.Parse(varPOI_STAKED[p].PntNum));
                pnt3d = idPnt.getCogoPntCoordinates();
                dblPnts.Add(pnt3d);
                ResultBuffer rb = new ResultBuffer {
                    new TypedValue(1000, idPnt.getCogoPntNumber().ToString()),
                    new TypedValue(1005, idPnt.getHandle().ToString())
                };
                Dict.addXRec(idDict, idPnt.ToString(), rb);
            }

            dblPnts.Add(dblPnts[0]);
            Draw.addPoly(dblPnts, fStake.STAKE_LAYER, 9);

            Misc.logUsage("STAKE", (lngPntNumEnd - lngPntNumBeg + 1));
        }