private void btnOk_Click(object sender, EventArgs e)
        {
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

            if (Validation())
            {
                bool useAccess   = false;
                int  projectcode = 0;

                List <Atend.Base.Equipment.EConsol> list = new List <Atend.Base.Equipment.EConsol>();
                ArrayList consoluse      = new ArrayList();
                ArrayList consolexis     = new ArrayList();
                ArrayList consolcount    = new ArrayList();
                ArrayList ConsolProjCode = new ArrayList();
                ArrayList DelConsol      = new ArrayList();

                Atend.Base.Equipment.EConsol eConsol = new Atend.Base.Equipment.EConsol();
                int Existance = 0;
                Atend.Base.Equipment.EPole    ePole    = new Atend.Base.Equipment.EPole();
                Atend.Base.Equipment.EPoleTip ePoletip = new Atend.Base.Equipment.EPoleTip();
                //ed.WriteMessage("IsSqlSelected={0}\n", gvPoleTip.SelectedRows[0].Cells[2].Value.ToString());
                Atend.Base.Equipment.EHalter halt = new Atend.Base.Equipment.EHalter();

                if (Convert.ToBoolean(gvPoleTip.Rows[gvPoleTip.CurrentRow.Index].Cells[2].Value) == true)
                {
                    ePoletip  = Atend.Base.Equipment.EPoleTip.SelectByXCode(new Guid(gvPoleTip.Rows[gvPoleTip.CurrentRow.Index].Cells[0].Value.ToString()));
                    ePole     = Atend.Base.Equipment.EPole.SelectByXCode(ePoletip.PoleXCode);
                    useAccess = false;
                    if (ePoletip.HalterCount != 0)
                    {
                        halt = Atend.Base.Equipment.EHalter.SelectByXCode(ePoletip.HalterXID);
                    }
                }
                else
                {
                    ePoletip  = Atend.Base.Equipment.EPoleTip.AccessSelectByCode(Convert.ToInt32(gvPoleTip.Rows[gvPoleTip.CurrentRow.Index].Cells[1].Value.ToString()));//gvPoleTip.SelectedRows[0].Cells[1].Value
                    ePole     = Atend.Base.Equipment.EPole.AccessSelectByCode(ePoletip.PoleCode);
                    useAccess = true;
                    if (ePoletip.HalterCount != 0)
                    {
                        halt = Atend.Base.Equipment.EHalter.AccessSelectByCode(ePoletip.HalterID);
                    }
                }

                foreach (DataRow dr in dtLastConsol.Rows)
                {
                    DelConsol.Add(dr["Code"].ToString());
                }



                //if (ePole.Shape == 0)
                //{
                //    ed.WriteMessage("**********I AM IN Shape=0\n");
                //    shape = 0;
                //    Atend.Global.Acad.DrawEquips.AcDrawCirclePole ACDCP = new Atend.Global.Acad.DrawEquips.AcDrawCirclePole();
                //    ACDCP.ePole = ePole;
                //    ACDCP.ePoleTip = ePoletip;
                //    ACDCP.UseAccess = useAccess;
                //    ACDCP.ProjectCode = Convert.ToInt32(cboProjCode.SelectedValue);
                //    ACDCP.Existance = Convert.ToByte(cboIsExist.SelectedValue);

                //    ACDCP.HalterExistance = Convert.ToByte(cboHIsExistance.SelectedValue);
                //    ACDCP.HalterProjectCode = Convert.ToInt32(cboHProjectCode.SelectedValue);
                //    ACDCP.Height = Convert.ToInt32(txtHeight.Text);
                //    ACDCP.eHalter = halt;
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.eConsols.Clear();
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.eConsolCount.Clear();
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.eConsolExistance.Clear();
                //    ed.WriteMessage("oo\n");
                //    ACDCP.eConsols.Clear();
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.eConsolUseAccess.Clear();
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.eConsolProjectCode.Clear();

                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.dPoleInfo.HalterCount = ePoletip.HalterCount;
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.dPoleInfo.HalterType = ePoletip.HalterID;
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.dPoleInfo.Factor = ePoletip.Factor;
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.Existance = Convert.ToByte(cboIsExist.SelectedValue);
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.UseAccess = useAccess;
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.ePole = ePole;
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.ePoleTip = ePoletip;
                //    //Atend.Base.Acad.AcadGlobal.CirclePoleData.ProjectCode = Convert.ToInt32(cboProjCode.SelectedValue);

                //    foreach (DataRow dr in dtgvPoleConsol.Rows)
                //    {
                //        if (Convert.ToInt32(dr["Count"].ToString()) != 0)
                //        {
                //            //DataGridViewComboBoxCell c = (DataGridViewComboBoxCell)gvConsol.Rows[i].Cells[3];
                //            //Existance = Convert.ToInt32(c.Value);

                //            //DataGridViewComboBoxCell cPCode = (DataGridViewComboBoxCell)gvConsol.Rows[i].Cells[5];
                //            //projectcode = Convert.ToInt32(cPCode.Value);
                //            if (Convert.ToBoolean(dr["IsSql"].ToString()))
                //            {
                //                ed.WriteMessage("LocalConsolXCODE={0}\n", dr["XCode"].ToString());
                //                eConsol = Atend.Base.Equipment.EConsol.SelectByXCode(new Guid(
                //                    dr["XCode"].ToString()));
                //                ed.WriteMessage("Consol.NAme={0}\n", eConsol.Name);
                //                ACDCP.eConsols.Add(eConsol);
                //                ed.WriteMessage("HH\n");
                //                ACDCP.eConsolUseAccess.Add(false);
                //                ed.WriteMessage("AA\n");
                //                ACDCP.eConsolCount.Add(Convert.ToInt32(dr["Count"].ToString()));
                //                ed.WriteMessage("Ab\n");

                //                ACDCP.eConsolExistance.Add(Convert.ToInt32(dr["IsExistance"].ToString()));
                //                ed.WriteMessage("Ac\n");

                //                ACDCP.eConsolProjectCode.Add(Convert.ToInt32(dr["ProjectCode"].ToString()));
                //            }
                //            else
                //            {
                //                ed.WriteMessage("Access Consol\n");
                //                eConsol = Atend.Base.Equipment.EConsol.AccessSelectByCode(Convert.ToInt32(
                //                   dr["AccessCode"].ToString()));
                //                ACDCP.eConsols.Add(eConsol);
                //                ACDCP.eConsolUseAccess.Add(true);
                //                ACDCP.eConsolCount.Add(Convert.ToInt32(dr["Count"].ToString()));
                //                ed.WriteMessage("eConsolExistance={0}\n", Existance);
                //                ACDCP.eConsolExistance.Add(Convert.ToInt32(dr["IsExistance"].ToString()));
                //                ACDCP.eConsolProjectCode.Add(Convert.ToInt32(dr["ProjectCode"].ToString()));

                //            }

                //        }
                //    }
                //    ed.WriteMessage("Consol.Count={0}\n", Atend.Base.Acad.AcadGlobal.CirclePoleData.eConsols.Count);

                //    if (ACDCP.UpdatePoleDataTip(objID, DelConsol, NodeCode))
                //    {
                //        AllowClose = true;
                //        return;
                //    }
                //}
                //else
                //{
                //    shape = 1;
                //    ed.WriteMessage("TYPE={0}\n", ePole.Type);
                //    if (ePole.Type == 2)
                //    {
                //        Atend.Global.Acad.DrawEquips.AcDrawPolygonPole ACDP = new Atend.Global.Acad.DrawEquips.AcDrawPolygonPole();
                //        ed.WriteMessage("***************Type=2\n");
                //        Type = 2;
                //        //Atend.Base.Acad.AcadGlobal.PolygonPoleData.eConsols.Clear();
                //        //Atend.Base.Acad.AcadGlobal.PolygonPoleData.eConsolCount.Clear();
                //        //Atend.Base.Acad.AcadGlobal.PolygonPoleData.eConsolExistance.Clear();
                //        //Atend.Base.Acad.AcadGlobal.PolygonPoleData.eConsols.Clear();
                //        //Atend.Base.Acad.AcadGlobal.PolygonPoleData.eConsolUseAccess.Clear();
                //        //Atend.Base.Acad.AcadGlobal.PolygonPoleData.eConsolProjectCode.Clear();

                //        //Atend.Base.Acad.AcadGlobal.PolygonPoleData.dPoleInfo.HalterCount = ePoletip.HalterCount;
                //        //Atend.Base.Acad.AcadGlobal.PolygonPoleData.dPoleInfo.HalterType = ePoletip.HalterID;
                //        //Atend.Base.Acad.AcadGlobal.PolygonPoleData.dPoleInfo.Factor = ePoletip.Factor;
                //        ACDP.Existance = Convert.ToByte(cboIsExist.SelectedValue);
                //        ACDP.UseAccess = useAccess;
                //        ACDP.ProjectCode = Convert.ToInt32(cboProjCode.SelectedValue);

                //        ACDP.ePole = ePole;
                //        ACDP.ePoleTip = ePoletip;


                //        ACDP.HalterExistance = Convert.ToByte(cboHIsExistance.SelectedValue);
                //        ACDP.HalterProjectCode = Convert.ToInt32(cboHProjectCode.SelectedValue);
                //        ACDP.Height = Convert.ToInt32(txtHeight.Text);
                //        ACDP.eHalter = halt;
                //        foreach (DataRow dr in dtgvPoleConsol.Rows)
                //        {
                //            if (Convert.ToInt32(dr["Count"].ToString()) != 0)
                //            {
                //                //DataGridViewComboBoxCell c = (DataGridViewComboBoxCell)gvConsol.Rows[i].Cells[3];


                //                //Existance = Convert.ToInt32(c.Value);
                //                //DataGridViewComboBoxCell cPCode = (DataGridViewComboBoxCell)gvConsol.Rows[i].Cells[5];
                //                //projectcode = Convert.ToInt32(cPCode.Value);
                //                ed.WriteMessage("***IsSQL={0}\n",dr["IsSql"].ToString());
                //                if (Convert.ToBoolean(dr["IsSql"].ToString()))
                //                {
                //                    eConsol = Atend.Base.Equipment.EConsol.SelectByXCode(new Guid(
                //                       dr["XCode"].ToString()));
                //                    ACDP.eConsols.Add(eConsol);
                //                    ACDP.eConsolUseAccess.Add(false);
                //                    ACDP.eConsolCount.Add(Convert.ToInt32(dr["Count"].ToString()));
                //                    ed.WriteMessage("eConsolExistance={0}\n", Existance);
                //                    ACDP.eConsolExistance.Add(Convert.ToInt32(dr["IsExistance"].ToString()));
                //                    ACDP.eConsolProjectCode.Add(Convert.ToInt32(dr["ProjectCode"].ToString()));
                //                }
                //                else
                //                {
                //                    eConsol = Atend.Base.Equipment.EConsol.AccessSelectByCode(Convert.ToInt32(
                //                       dr["AccessCode"].ToString()));
                //                    ACDP.eConsols.Add(eConsol);
                //                    ACDP.eConsolUseAccess.Add(true);
                //                    ACDP.eConsolCount.Add(Convert.ToInt32(dr["Count"].ToString()));
                //                    ed.WriteMessage("eConsolExistance={0}\n", Existance);
                //                    ACDP.eConsolExistance.Add(Convert.ToInt32(dr["IsExistance"].ToString()));
                //                    ACDP.eConsolProjectCode.Add(Convert.ToInt32(dr["ProjectCode"].ToString()));
                //                }
                //            }
                //        }
                //        if (ACDP.UpdatePoleDataTip(objID, DelConsol, NodeCode))
                //        {
                //            AllowClose = true;
                //            return;
                //        }
                //        //ed.WriteMessage("Consol.Count={0}\n", Atend.Base.Acad.AcadGlobal.PolygonPoleData.eConsols.Count);

                //    }
                //    //if (ePole.Type == 3)
                //    //{
                //Type = 3;
                Atend.Global.Acad.DrawEquips.AcDrawPole ADP = new Atend.Global.Acad.DrawEquips.AcDrawPole();
                //Atend.Base.Acad.AcadGlobal.PoleData.eConsols.Clear();
                //Atend.Base.Acad.AcadGlobal.PoleData.eConsolCount.Clear();
                //Atend.Base.Acad.AcadGlobal.PoleData.eConsolExistance.Clear();
                //Atend.Base.Acad.AcadGlobal.PoleData.eConsols.Clear();
                //Atend.Base.Acad.AcadGlobal.PoleData.eConsolUseAccess.Clear();
                //Atend.Base.Acad.AcadGlobal.PoleData.eConsolProjectCode.Clear();

                //Atend.Base.Acad.AcadGlobal.PoleData.dPoleInfo.HalterCount = ePoletip.HalterCount;
                //Atend.Base.Acad.AcadGlobal.PoleData.dPoleInfo.HalterType = ePoletip.HalterID;
                //Atend.Base.Acad.AcadGlobal.PoleData.dPoleInfo.Factor = ePoletip.Factor;
                Atend.Base.Base.BEquipStatus status = Atend.Base.Base.BEquipStatus.SelectByCode(Convert.ToInt32(cboIsExist.SelectedValue.ToString()));
                ADP.Existance = status.ACode;

                if (cboProjCode.Items.Count == 0)
                {
                    ADP.ProjectCode = 0;
                }
                else
                {
                    ADP.ProjectCode = Convert.ToInt32(cboProjCode.SelectedValue);
                }
                ADP.UseAccess = useAccess;
                ADP.ePoleTip  = ePoletip;
                ADP.ePole     = ePole;


                Atend.Base.Base.BEquipStatus statusHalter = Atend.Base.Base.BEquipStatus.SelectByCode(Convert.ToInt32(cboHIsExistance.SelectedValue.ToString()));
                ADP.HalterExist = statusHalter.ACode;

                if (cboHProjectCode.Items.Count == 0)
                {
                    ADP.HalterProjectCode = 0;
                }
                else
                {
                    ADP.HalterProjectCode = Convert.ToInt32(cboHProjectCode.SelectedValue);
                }

                ADP.Height       = Convert.ToInt32(txtHeight.Text);
                ADP.eHalter      = halt;
                ADP.eHalterCount = Convert.ToInt32(txtHalterCount.Text);

                foreach (DataRow dr in dtgvPoleConsol.Rows)
                {
                    if (Convert.ToInt32(dr["Count"].ToString()) != 0)
                    {
                        //DataGridViewComboBoxCell c = (DataGridViewComboBoxCell)gvConsol.Rows[i].Cells[3];

                        //Existance = Convert.ToInt32(c.Value);
                        //DataGridViewComboBoxCell cPCode = (DataGridViewComboBoxCell)gvConsol.Rows[i].Cells[5];
                        //projectcode = Convert.ToInt32(cPCode.Value);
                        if (Convert.ToBoolean(dr["IsSql"].ToString()))
                        {
                            eConsol = Atend.Base.Equipment.EConsol.SelectByXCode(new Guid(
                                                                                     dr["XCode"].ToString()));
                            ADP.eConsols.Add(eConsol);
                            ADP.eConsolUseAccess.Add(false);
                            ADP.eConsolCount.Add(Convert.ToInt32(dr["Count"].ToString()));

                            Atend.Base.Base.BEquipStatus status2 = Atend.Base.Base.BEquipStatus.SelectByCode(Convert.ToInt32(dr["IsExistance"].ToString()));
                            ADP.eConsolExistance.Add(status2.ACode);

                            if (dr["ProjectCode"].ToString() == "")
                            {
                                ADP.eConsolProjectCode.Add(0);
                            }
                            else
                            {
                                ADP.eConsolProjectCode.Add(Convert.ToInt32(dr["ProjectCode"].ToString()));
                            }
                        }
                        else
                        {
                            eConsol = Atend.Base.Equipment.EConsol.AccessSelectByCode(Convert.ToInt32(
                                                                                          dr["AccessCode"].ToString()));
                            ADP.eConsols.Add(eConsol);
                            ADP.eConsolUseAccess.Add(true);
                            ADP.eConsolCount.Add(Convert.ToInt32(dr["Count"].ToString()));

                            Atend.Base.Base.BEquipStatus status2 = Atend.Base.Base.BEquipStatus.SelectByCode(Convert.ToInt32(dr["IsExistance"].ToString()));
                            ADP.eConsolExistance.Add(status2.ACode);

                            if (dr["ProjectCode"].ToString() == "")
                            {
                                ADP.eConsolProjectCode.Add(0);
                            }
                            else
                            {
                                ADP.eConsolProjectCode.Add(Convert.ToInt32(dr["ProjectCode"].ToString()));
                            }
                        }
                    }
                }
                if (ADP.UpdatePoleDataTip(objID, DelConsol, NodeCode))
                {
                    AllowClose = true;
                    return;
                }

                //}


                //}

                //AllowClose = true;
            }
            else
            {
                AllowClose = false;
            }
        }
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~ methods ~~~~~~~~~~~~~~~~~~~~~~~~~~~//


        ///// <summary>
        ///// Save all data before start AutoPoleInstallation
        ///// </summary>
        ///// <returns></returns>
        //private bool PrepareData()
        //{
        //    Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
        //    OleDbConnection aConnection = new OleDbConnection(Atend.Control.ConnectionString.AccessCnString);
        //    OleDbTransaction aTransaction;
        //    try
        //    {
        //        aConnection.Open();
        //        aTransaction = aConnection.BeginTransaction();

        //        try
        //        {
        //            if (!selectedPole.AccessInsert(aTransaction, aConnection, true, true))
        //            {
        //                throw new System.Exception("selectedPole.AccessInsert");
        //            }
        //            if (SelectedBranch.ProductType == (int)Atend.Control.Enum.ProductType.Conductor)
        //            {
        //                if (!SelectedConsol.AccessInsert(aTransaction, aConnection, true, true))
        //                {
        //                    throw new System.Exception("SelectedConsol.AccessInsert");
        //                }
        //                if (!SelectedConsolTension.AccessInsert(aTransaction, aConnection, true, true))
        //                {
        //                    throw new System.Exception("SelectedConsolTension.AccessInsert");
        //                }
        //            }
        //            else if (SelectedBranch.ProductType == (int)Atend.Control.Enum.ProductType.SelfKeeper)
        //            {
        //                if (!SelectedClamp.AccessInsert(aTransaction, aConnection, true, true))
        //                {
        //                    throw new System.Exception("SelectedClamp.AccessInsert");
        //                }
        //                if (!SelectedClampTension.AccessInsert(aTransaction, aConnection, true, true))
        //                {
        //                    throw new System.Exception("SelectedClampTension.AccessInsert");
        //                }

        //            }



        //        }
        //        catch (System.Exception ex2)
        //        {
        //            ed.WriteMessage("ERROR PrepareData: {0} \n", ex2.Message);
        //            aTransaction.Rollback();
        //            aConnection.Close();
        //            return false;
        //        }
        //    }
        //    catch (System.Exception ex1)
        //    {
        //        ed.WriteMessage("ERROR PrepareData: {0} \n", ex1.Message);
        //        aConnection.Close();
        //        return false;
        //    }

        //    aTransaction.Commit();
        //    aConnection.Close();
        //    return true;
        //}

        public bool PoleInstallationWithoutForbiddenArea(Guid SelectedPoleDpackageCode)
        {
            Editor ed     = Application.DocumentManager.MdiActiveDocument.Editor;
            bool   Answer = true;
            List <ObjectIdCollection> _AllConsols = new List <ObjectIdCollection>();
            ObjectIdCollection        _AllClamps  = new ObjectIdCollection();

            double _SectionLength = 0;
            double _SpanLength    = 0;
            int    _SectionCount  = SectionCalculation(out _SectionLength);
            int    _SpanCount     = SpanCalculation(_SectionLength, out _SpanLength);

            Atend.Base.Acad.AT_INFO CurrentBranchInfo = Atend.Base.Acad.AT_INFO.SelectBySelectedObjectId(BranchEntity.ObjectId);
            ObjectIdCollection      t = new ObjectIdCollection();

            try
            {
                Atend.Global.Acad.DrawEquips.AcDrawPole        _AcDrawPole        = null;
                Atend.Global.Acad.DrawEquips.AcDrawCirclePole  _AcDrawCirclePole  = null;
                Atend.Global.Acad.DrawEquips.AcDrawPolygonPole _AcDrawPolygonPole = null;

                if (_SpanLength != -1)
                {
                    CalculateSectionPoints(branchEntity.StartPoint, branchEntity.EndPoint, _SectionCount);
                    Atend.Base.Design.DPackage PolePack = Atend.Base.Design.DPackage.AccessSelectByNodeCode(SelectedPoleDpackageCode);

                    //Start Pole consols or clamp
                    if (SelectedBranch.ProductType == (int)Atend.Control.Enum.ProductType.Conductor)
                    {
                        t.Add(GetStartConsolOrClamp());
                        _AllConsols.Add(t);
                    }
                    else
                    {
                        _AllClamps.Add(GetStartConsolOrClamp());
                    }


                    for (int SectionCounter = 0; SectionCounter < _SectionCount; SectionCounter++)
                    {
                        SpanPoints.Clear();
                        CalculateSpanPoints(SectionPoints[SectionCounter], SectionPoints[SectionCounter + 1], _SpanCount);
                        for (int SpanCounter = 1; SpanCounter < _SpanCount; SpanCounter++)
                        {
                            Atend.Base.Design.DPoleInfo PoleInfo = new Atend.Base.Design.DPoleInfo();
                            PoleInfo.HalterCount = 0;
                            PoleInfo.HalterType  = 0;
                            PoleInfo.Factor      = 0;
                            if (SelectedBranch.ProductType == (int)Atend.Control.Enum.ProductType.Conductor)
                            {
                                #region Counductor
                                //ed.WriteMessage("~~~~~~~~{0}~~~~~~~~~~~~~~GO TO SHAPE~~~~~~~~~~~{1}~~~~~~~~~~~~~~\n", SelectedPole.Shape, SelectedPole.Type);
                                if (SelectedPole.Shape == 0)
                                {
                                    //ed.WriteMessage("~~~~~~~~~~~~~~~~~~~~~~TWO~~~~~~~~~~~~~~~~~~~~~~~~~\n");
                                    _AcDrawCirclePole = new Atend.Global.Acad.DrawEquips.AcDrawCirclePole();
                                    #region POLECircle
                                    _AcDrawCirclePole.UseAccess   = true;
                                    _AcDrawCirclePole.ePole       = SelectedPole;
                                    _AcDrawCirclePole.ProjectCode = PolePack.ProjectCode;
                                    _AcDrawCirclePole.Existance   = Convert.ToByte(PolePack.IsExistance);

                                    _AcDrawCirclePole.dPoleInfo = PoleInfo;

                                    _AcDrawCirclePole.eConsols.Add(SelectedConsol);
                                    _AcDrawCirclePole.eConsolCount.Add(2);
                                    _AcDrawCirclePole.eConsolExistance.Add(Convert.ToByte(PolePack.IsExistance));
                                    _AcDrawCirclePole.eConsolProjectCode.Add(PolePack.ProjectCode);
                                    _AcDrawCirclePole.eConsolUseAccess.Add(false);

                                    _AcDrawCirclePole.eHalterCount = 0;

                                    if (!_AcDrawCirclePole.DrawPoleCircle(SpanPoints[SpanCounter], GetStartPoleAngle() + 90, out t))
                                    {
                                        throw new System.Exception("failor while drawing pole");
                                    }
                                    _AllConsols.Add(t);
                                    #endregion
                                }
                                else if (SelectedPole.Shape == 1)
                                {
                                    if (SelectedPole.Type == 2)//pertic
                                    {
                                        //ed.WriteMessage("~~~~~~~~~~~~~~~~~~~~~~THREE~~~~~~~~~~~~~~~~~~~~~~~~~\n");
                                        _AcDrawPolygonPole = new Atend.Global.Acad.DrawEquips.AcDrawPolygonPole();
                                        #region PolePolygon
                                        _AcDrawPolygonPole.UseAccess   = true;
                                        _AcDrawPolygonPole.ePole       = SelectedPole;
                                        _AcDrawPolygonPole.ProjectCode = PolePack.ProjectCode;
                                        _AcDrawPolygonPole.Existance   = Convert.ToByte(PolePack.IsExistance);

                                        _AcDrawPolygonPole.dPoleInfo = PoleInfo;

                                        _AcDrawPolygonPole.eConsols.Add(SelectedConsol);
                                        _AcDrawPolygonPole.eConsolCount.Add(2);
                                        _AcDrawPolygonPole.eConsolExistance.Add(Convert.ToByte(PolePack.IsExistance));
                                        _AcDrawPolygonPole.eConsolProjectCode.Add(PolePack.ProjectCode);
                                        _AcDrawPolygonPole.eConsolUseAccess.Add(false);

                                        _AcDrawPolygonPole.eHalterCount = 0;

                                        if (!_AcDrawPolygonPole.DrawPolePolygon(SpanPoints[SpanCounter], GetStartPoleAngle() + 90, out t))
                                        {
                                            throw new System.Exception("failor while drawing pole");
                                        }
                                        _AllConsols.Add(t);
                                        #endregion
                                    }
                                    else
                                    {
                                        //ed.WriteMessage("~~~~~~~~~~~~~~~~~~~~~~ONE~~~~~~~~~~~~~~~~~~~~~~~~~\n");
                                        _AcDrawPole = new Atend.Global.Acad.DrawEquips.AcDrawPole();
                                        #region Pole
                                        _AcDrawPole.UseAccess   = true;
                                        _AcDrawPole.ePole       = SelectedPole;
                                        _AcDrawPole.ProjectCode = PolePack.ProjectCode;
                                        _AcDrawPole.Existance   = Convert.ToByte(PolePack.IsExistance);

                                        _AcDrawPole.dPoleInfo = PoleInfo;

                                        _AcDrawPole.eConsols.Add(SelectedConsol);
                                        _AcDrawPole.eConsolCount.Add(2);
                                        _AcDrawPole.eConsolExistance.Add(Convert.ToByte(PolePack.IsExistance));
                                        _AcDrawPole.eConsolProjectCode.Add(PolePack.ProjectCode);
                                        _AcDrawPole.eConsolUseAccess.Add(false);

                                        _AcDrawPole.eHalterCount = 0;

                                        if (!_AcDrawPole.DrawPole(SpanPoints[SpanCounter], GetStartPoleAngle() + 90, out t))
                                        {
                                            throw new System.Exception("failor while drawing pole");
                                        }
                                        _AllConsols.Add(t);
                                        #endregion
                                    }
                                }
                                #endregion
                            }//end of if (SelectedBranch.ProductType == (int)Atend.Control.Enum.ProductType.Conductor)
                            else if (SelectedBranch.ProductType == (int)Atend.Control.Enum.ProductType.SelfKeeper)
                            {
                                #region Selfkeeper
                                if (SelectedPole.Shape == 0)
                                {
                                    //ed.WriteMessage("~~~~~~~~~~~~~~~~~~~~~~TWO~~~~~~~~~~~~~~~~~~~~~~~~~\n");
                                    _AcDrawCirclePole = new Atend.Global.Acad.DrawEquips.AcDrawCirclePole();
                                    #region POLECircle
                                    _AcDrawCirclePole.UseAccess   = true;
                                    _AcDrawCirclePole.ePole       = SelectedPole;
                                    _AcDrawCirclePole.ProjectCode = PolePack.ProjectCode;
                                    _AcDrawCirclePole.Existance   = Convert.ToByte(PolePack.IsExistance);

                                    _AcDrawCirclePole.dPoleInfo = PoleInfo;

                                    _AcDrawCirclePole.eConsols           = new List <Atend.Base.Equipment.EConsol>();
                                    _AcDrawCirclePole.eConsolCount       = new ArrayList();
                                    _AcDrawCirclePole.eConsolExistance   = new ArrayList();
                                    _AcDrawCirclePole.eConsolProjectCode = new ArrayList();
                                    _AcDrawCirclePole.eConsolUseAccess   = new ArrayList();

                                    _AcDrawCirclePole.eHalterCount = 0;

                                    if (!_AcDrawCirclePole.DrawPoleCircle(SpanPoints[SpanCounter], GetStartPoleAngle() + 90, out t))
                                    {
                                        throw new System.Exception("failor while drawing pole");
                                    }
                                    //_AllClamps.Add(t[0]);
                                    #endregion
                                }
                                else if (SelectedPole.Shape == 1)
                                {
                                    if (SelectedPole.Type == 2)//pertic
                                    {
                                        //ed.WriteMessage("~~~~~~~~~~~~~~~~~~~~~~THREE~~~~~~~~~~~~~~~~~~~~~~~~~\n");
                                        _AcDrawPolygonPole = new Atend.Global.Acad.DrawEquips.AcDrawPolygonPole();
                                        #region PolePolygon
                                        _AcDrawPolygonPole.UseAccess   = true;
                                        _AcDrawPolygonPole.ePole       = SelectedPole;
                                        _AcDrawPolygonPole.ProjectCode = PolePack.ProjectCode;
                                        _AcDrawPolygonPole.Existance   = Convert.ToByte(PolePack.IsExistance);

                                        _AcDrawPolygonPole.dPoleInfo = PoleInfo;

                                        _AcDrawPolygonPole.eConsols           = new List <Atend.Base.Equipment.EConsol>();
                                        _AcDrawPolygonPole.eConsolCount       = new ArrayList();
                                        _AcDrawPolygonPole.eConsolExistance   = new ArrayList();
                                        _AcDrawPolygonPole.eConsolProjectCode = new ArrayList();
                                        _AcDrawPolygonPole.eConsolUseAccess   = new ArrayList();

                                        _AcDrawPolygonPole.eHalterCount = 0;

                                        if (!_AcDrawPolygonPole.DrawPolePolygon(SpanPoints[SpanCounter], GetStartPoleAngle() + 90, out t))
                                        {
                                            throw new System.Exception("failor while drawing pole");
                                        }
                                        //_AllClamps.Add(t[0]);
                                        #endregion
                                    }
                                    else
                                    {
                                        //ed.WriteMessage("~~~~~~~~~~~~~~~~~~~~~~ONE~~~~~~~~~~~~~~~~~~~~~~~~~\n");
                                        _AcDrawPole = new Atend.Global.Acad.DrawEquips.AcDrawPole();
                                        #region Pole
                                        _AcDrawPole.UseAccess   = true;
                                        _AcDrawPole.ePole       = SelectedPole;
                                        _AcDrawPole.ProjectCode = PolePack.ProjectCode;
                                        _AcDrawPole.Existance   = Convert.ToByte(PolePack.IsExistance);

                                        _AcDrawPole.dPoleInfo = PoleInfo;

                                        _AcDrawPole.eConsols           = new List <Atend.Base.Equipment.EConsol>();
                                        _AcDrawPole.eConsolCount       = new ArrayList();
                                        _AcDrawPole.eConsolExistance   = new ArrayList();
                                        _AcDrawPole.eConsolProjectCode = new ArrayList();
                                        _AcDrawPole.eConsolUseAccess   = new ArrayList();

                                        _AcDrawPole.eHalterCount = 0;

                                        if (!_AcDrawPole.DrawPole(SpanPoints[SpanCounter], GetStartPoleAngle() + 90, out t))
                                        {
                                            throw new System.Exception("failor while drawing pole");
                                        }
                                        //_AllClamps.Add(t[0]);
                                        #endregion
                                    }
                                }
                                #endregion


                                Atend.Global.Acad.DrawEquips.AcDrawKalamp _AcDrawKalamp = new Atend.Global.Acad.DrawEquips.AcDrawKalamp();
                                _AcDrawKalamp.eClamp      = SelectedClamp;
                                _AcDrawKalamp.Existance   = PolePack.IsExistance;
                                _AcDrawKalamp.ProjectCode = PolePack.ProjectCode;
                                _AcDrawKalamp.UseAccess   = false;
                                _AllClamps.Add(_AcDrawKalamp.DrawKalamp(Atend.Global.Acad.UAcad.CenterOfEntity(Atend.Global.Acad.UAcad.GetEntityByObjectID(t[0])), t[0]));
                            } //end of else if (SelectedBranch.ProductType == (int)Atend.Control.Enum.ProductType.SelfKeeper)
                        }     //end of span


                        if (SectionCounter + 1 != _SectionCount)
                        {
                            //ed.WriteMessage("~~~~~~~~~~~~<<<SECTION>>>~~~~~~~~~~~~~\n");
                            if (_AcDrawPole != null)
                            {
                                //ed.WriteMessage("~~~~~~~~~~~~~~~~~~~~~~ONE~~~~~~~~~~~~~~~~~~~~~~~~~\n");


                                if (CurrentBranchInfo.NodeType != (int)Atend.Control.Enum.ProductType.SelfKeeper)
                                {
                                    _AcDrawPole.eConsols = new List <Atend.Base.Equipment.EConsol>();
                                    _AcDrawPole.eConsols.Add(SelectedConsolTension);
                                    _AcDrawPole.eConsols.Add(SelectedConsolTension);

                                    _AcDrawPole.eConsolCount = new ArrayList();
                                    _AcDrawPole.eConsolCount.Add(2);
                                    _AcDrawPole.eConsolCount.Add(2);

                                    _AcDrawPole.eConsolExistance = new ArrayList();
                                    _AcDrawPole.eConsolExistance.Add(Convert.ToByte(PolePack.IsExistance));
                                    _AcDrawPole.eConsolExistance.Add(Convert.ToByte(PolePack.IsExistance));

                                    _AcDrawPole.eConsolProjectCode = new ArrayList();
                                    _AcDrawPole.eConsolProjectCode.Add(PolePack.ProjectCode);
                                    _AcDrawPole.eConsolProjectCode.Add(PolePack.ProjectCode);

                                    _AcDrawPole.eConsolUseAccess = new ArrayList();
                                    _AcDrawPole.eConsolUseAccess.Add(false);
                                    _AcDrawPole.eConsolUseAccess.Add(false);
                                }
                                else
                                {
                                    _AcDrawPole.eConsols           = new List <Atend.Base.Equipment.EConsol>();
                                    _AcDrawPole.eConsolCount       = new ArrayList();
                                    _AcDrawPole.eConsolExistance   = new ArrayList();
                                    _AcDrawPole.eConsolProjectCode = new ArrayList();
                                    _AcDrawPole.eConsolUseAccess   = new ArrayList();
                                }


                                _AcDrawPole.eHalterCount = 0;
                                if (!_AcDrawPole.DrawPole(SectionPoints[SectionCounter + 1], GetStartPoleAngle(), out t))
                                {
                                    throw new System.Exception("failor while drawing pole");
                                }
                            }
                            else if (_AcDrawCirclePole != null)
                            {
                                //ed.WriteMessage("~~~~~~~~~~~~~~~~~~~~~~TWO~~~~~~~~~~~~~~~~~~~~~~~~~\n");

                                if (CurrentBranchInfo.NodeType != (int)Atend.Control.Enum.ProductType.SelfKeeper)
                                {
                                    _AcDrawCirclePole.eConsols = new List <Atend.Base.Equipment.EConsol>();
                                    _AcDrawCirclePole.eConsols.Add(SelectedConsolTension);
                                    _AcDrawCirclePole.eConsols.Add(SelectedConsolTension);

                                    _AcDrawCirclePole.eConsolCount = new ArrayList();
                                    _AcDrawCirclePole.eConsolCount.Add(2);
                                    _AcDrawCirclePole.eConsolCount.Add(2);

                                    _AcDrawCirclePole.eConsolExistance = new ArrayList();
                                    _AcDrawCirclePole.eConsolExistance.Add(Convert.ToByte(PolePack.IsExistance));
                                    _AcDrawCirclePole.eConsolExistance.Add(Convert.ToByte(PolePack.IsExistance));

                                    _AcDrawCirclePole.eConsolProjectCode = new ArrayList();
                                    _AcDrawCirclePole.eConsolProjectCode.Add(PolePack.ProjectCode);
                                    _AcDrawCirclePole.eConsolProjectCode.Add(PolePack.ProjectCode);

                                    _AcDrawCirclePole.eConsolUseAccess = new ArrayList();
                                    _AcDrawCirclePole.eConsolUseAccess.Add(false);
                                    _AcDrawCirclePole.eConsolUseAccess.Add(false);
                                }
                                else
                                {
                                    _AcDrawCirclePole.eConsols           = new List <Atend.Base.Equipment.EConsol>();
                                    _AcDrawCirclePole.eConsolCount       = new ArrayList();
                                    _AcDrawCirclePole.eConsolExistance   = new ArrayList();
                                    _AcDrawCirclePole.eConsolProjectCode = new ArrayList();
                                    _AcDrawCirclePole.eConsolUseAccess   = new ArrayList();
                                }

                                _AcDrawCirclePole.eHalterCount = 0;
                                if (!_AcDrawCirclePole.DrawPoleCircle(SectionPoints[SectionCounter + 1], GetStartPoleAngle(), out t))
                                {
                                    throw new System.Exception("failor while drawing pole");
                                }
                            }
                            else if (_AcDrawPolygonPole != null)
                            {
                                //ed.WriteMessage("~~~~~~~~~~~~~~~~~~~~~~THREE~~~~~~~~~~~~~~~~~~~~~~~~~\n");


                                if (CurrentBranchInfo.NodeType != (int)Atend.Control.Enum.ProductType.SelfKeeper)
                                {
                                    _AcDrawPolygonPole.eConsols = new List <Atend.Base.Equipment.EConsol>();
                                    _AcDrawPolygonPole.eConsols.Add(SelectedConsolTension);
                                    _AcDrawPolygonPole.eConsols.Add(SelectedConsolTension);

                                    _AcDrawPolygonPole.eConsolCount = new ArrayList();
                                    _AcDrawPolygonPole.eConsolCount.Add(2);
                                    _AcDrawPolygonPole.eConsolCount.Add(2);

                                    _AcDrawPolygonPole.eConsolExistance = new ArrayList();
                                    _AcDrawPolygonPole.eConsolExistance.Add(Convert.ToByte(PolePack.IsExistance));
                                    _AcDrawPolygonPole.eConsolExistance.Add(Convert.ToByte(PolePack.IsExistance));

                                    _AcDrawPolygonPole.eConsolProjectCode = new ArrayList();
                                    _AcDrawPolygonPole.eConsolProjectCode.Add(PolePack.ProjectCode);
                                    _AcDrawPolygonPole.eConsolProjectCode.Add(PolePack.ProjectCode);

                                    _AcDrawPolygonPole.eConsolUseAccess = new ArrayList();
                                    _AcDrawPolygonPole.eConsolUseAccess.Add(false);
                                    _AcDrawPolygonPole.eConsolUseAccess.Add(false);
                                }
                                else
                                {
                                    _AcDrawPolygonPole.eConsols           = new List <Atend.Base.Equipment.EConsol>();
                                    _AcDrawPolygonPole.eConsolCount       = new ArrayList();
                                    _AcDrawPolygonPole.eConsolExistance   = new ArrayList();
                                    _AcDrawPolygonPole.eConsolProjectCode = new ArrayList();
                                    _AcDrawPolygonPole.eConsolUseAccess   = new ArrayList();
                                }

                                ////ed.WriteMessage("### BBB ### \n");
                                _AcDrawPolygonPole.eHalterCount = 0;
                                if (!_AcDrawPolygonPole.DrawPolePolygon(SectionPoints[SectionCounter + 1], GetStartPoleAngle(), out t))
                                {
                                    throw new System.Exception("failor while drawing pole");
                                }
                                //ed.WriteMessage("### GGG ### \n");
                            }

                            if (CurrentBranchInfo.NodeType == (int)Atend.Control.Enum.ProductType.Conductor)
                            {
                                _AllConsols.Add(t);
                            }
                            else if (CurrentBranchInfo.NodeType == (int)Atend.Control.Enum.ProductType.SelfKeeper)
                            {
                                Atend.Global.Acad.DrawEquips.AcDrawKalamp _AcDrawKalamp = new Atend.Global.Acad.DrawEquips.AcDrawKalamp();
                                _AcDrawKalamp.eClamp      = SelectedClampTension;
                                _AcDrawKalamp.Existance   = PolePack.IsExistance;
                                _AcDrawKalamp.ProjectCode = PolePack.ProjectCode;
                                _AcDrawKalamp.UseAccess   = false;
                                _AllClamps.Add(_AcDrawKalamp.DrawKalamp(Atend.Global.Acad.UAcad.CenterOfEntity(Atend.Global.Acad.UAcad.GetEntityByObjectID(t[0])), t[0]));
                            }
                            _AcDrawCirclePole  = null;
                            _AcDrawPole        = null;
                            _AcDrawPolygonPole = null;

                            // ed.WriteMessage("~~~~~~~~~~~~<<<NOT SECTION>>>~~~~~~~~~~~~~\n");
                        }//change section
                    }
                    //End Pole consols

                    if (CurrentBranchInfo.NodeType == (int)Atend.Control.Enum.ProductType.Conductor)
                    {
                        t = new ObjectIdCollection();
                        t.Add(GetEndConsolOrClamp());
                        _AllConsols.Add(t);
                    }
                    else if (CurrentBranchInfo.NodeType == (int)Atend.Control.Enum.ProductType.SelfKeeper)
                    {
                        //_AllClamps.Add(t[0]);
                        _AllClamps.Add(GetEndConsolOrClamp());
                    }

                    #region Do Branch Operation Here

                    if (CurrentBranchInfo.NodeType == (int)Atend.Control.Enum.ProductType.Conductor)
                    {
                        #region Conductor Operation
                        //delete conductor
                        if (Atend.Global.Acad.DrawEquips.AcDrawConductor.DeleteConductorData(branchEntity.ObjectId))
                        {
                            Atend.Global.Acad.DrawEquips.AcDrawConductor.DeleteConductor(branchEntity.ObjectId);
                        }
                        //ed.WriteMessage("~~~~~~ start sim keshi ~~~~~~~~~\n");
                        ObjectId LastConsol = ObjectId.Null, StartConsol = ObjectId.Null;
                        for (int ii = 0; ii < _AllConsols.Count - 1; ii++)
                        {
                            //ed.WriteMessage("~~~~~~~~~~~~~~~~~~~~~~~~\n");
                            ObjectIdCollection o1 = _AllConsols[ii];
                            //foreach (ObjectId oii in o1)
                            //{
                            //    ed.WriteMessage("oi:{0}\n", oii);
                            //}


                            if (o1.Count == 1)
                            {
                                StartConsol = o1[0];
                            }
                            else
                            {
                                if (o1[1] == LastConsol)
                                {
                                    StartConsol = o1[0];
                                }
                                else
                                {
                                    StartConsol = o1[1];
                                }
                            }
                            ObjectIdCollection o2 = _AllConsols[ii + 1];
                            LastConsol = o2[0];
                            //ed.WriteMessage("Start:{0} , End:{1} \n", StartConsol, LastConsol);
                            Atend.Global.Acad.DrawEquips.AcDrawConductor _AcDrawConductor = new Atend.Global.Acad.DrawEquips.AcDrawConductor();
                            _AcDrawConductor.UseAccess = true;
                            //ed.WriteMessage("111 \n");



                            _AcDrawConductor.eConductorTip = Atend.Base.Equipment.EConductorTip.AccessSelectByCode(CurrentBranchInfo.ProductCode);
                            //ed.WriteMessage("112 \n");


                            ///////////_AcDrawConductor.eConductors.Add(Atend.Base.Equipment.EConductor.AccessSelectByCode(_AcDrawConductor.eConductorTip.NeutralProductCode));
                            //ed.WriteMessage("113 \n");


                            //////////_AcDrawConductor.eConductors.Add(Atend.Base.Equipment.EConductor.AccessSelectByCode(5));
                            //ed.WriteMessage("114 \n");


                            /////////_AcDrawConductor.eConductors.Add(Atend.Base.Equipment.EConductor.AccessSelectByCode(5));
                            //ed.WriteMessage("115 \n");


                            Atend.Base.Design.DBranch _DBranch = Atend.Base.Design.DBranch.AccessSelectByCode(new Guid(CurrentBranchInfo.NodeCode));
                            if (_DBranch.Code != Guid.Empty)
                            {
                                _AcDrawConductor.Existance = _DBranch.IsExist;
                                //ed.WriteMessage("116 \n");


                                _AcDrawConductor.ProjectCode = _DBranch.ProjectCode;
                                //ed.WriteMessage("i will go to draw sim \n");
                            }
                            else
                            {
                                _AcDrawConductor.Existance = 0;
                                //ed.WriteMessage("116 \n");


                                _AcDrawConductor.ProjectCode = 0;
                                //ed.WriteMessage("i will go to draw sim \n");
                            }

                            _AcDrawConductor.DrawConductor(Atend.Global.Acad.UAcad.CenterOfEntity(Atend.Global.Acad.UAcad.GetEntityByObjectID(StartConsol)), Atend.Global.Acad.UAcad.CenterOfEntity(Atend.Global.Acad.UAcad.GetEntityByObjectID(LastConsol)),
                                                           StartConsol, LastConsol, _SpanLength);
                            //ed.WriteMessage("Start:{0} , End:{1} \n", StartConsol, LastConsol);
                        }
                        //ed.WriteMessage("~~~~~~ end sim keshi ~~~~~~~~~\n");
                        #endregion
                    }
                    else if (CurrentBranchInfo.NodeType == (int)Atend.Control.Enum.ProductType.SelfKeeper)
                    {
                        #region SelfKeeper Operation


                        if (Atend.Global.Acad.DrawEquips.AcDrawSelfKeeper.DeleteSelfKeeperData(branchEntity.ObjectId))
                        {
                            //ed.WriteMessage("delete data io{0}\n", branchEntity.ObjectId);
                            if (Atend.Global.Acad.DrawEquips.AcDrawSelfKeeper.DeleteSelfKeeper(branchEntity.ObjectId, true))
                            {
                                //ed.WriteMessage("delete graphic \n");

                                for (int ClampCounter = 0; ClampCounter < _AllClamps.Count - 1; ClampCounter++)
                                {
                                    //ed.WriteMessage("draw self keeper \n");

                                    //ed.WriteMessage("ANSWER={0} \n", oi);
                                    Atend.Global.Acad.DrawEquips.AcDrawSelfKeeper _AcDrawSelfKeeper = new Atend.Global.Acad.DrawEquips.AcDrawSelfKeeper();
                                    _AcDrawSelfKeeper.UseAccess      = true;
                                    _AcDrawSelfKeeper.eSelfKeeperTip = Atend.Base.Equipment.ESelfKeeperTip.AccessSelectByCode(SelectedBranch.ProductCode);
                                    _AcDrawSelfKeeper.Existance      = SelectedBranch.IsExist;
                                    _AcDrawSelfKeeper.ProjectCode    = SelectedBranch.ProjectCode;

                                    _AcDrawSelfKeeper.DrawSelfKeeper(Atend.Global.Acad.UAcad.CenterOfEntity(Atend.Global.Acad.UAcad.GetEntityByObjectID(_AllClamps[ClampCounter])), Atend.Global.Acad.UAcad.CenterOfEntity(Atend.Global.Acad.UAcad.GetEntityByObjectID(_AllClamps[ClampCounter + 1])), _AllClamps[ClampCounter], _AllClamps[ClampCounter + 1], _SpanLength);
                                }
                            }
                            else
                            {
                                throw new System.Exception("while deleting self keeper");
                            }
                        }
                        else
                        {
                            throw new System.Exception("while deleting self keeper");
                        }

                        #endregion
                    }
                    #endregion
                }
                else
                {
                    ed.WriteMessage("طول اسپن قابل محاسبه نمی باشد" + "\n");
                    Answer = false;
                }
            }
            catch (System.Exception ex)
            {
                ed.WriteMessage("Error While Pole installation : {0} \n", ex.Message);
                Answer = false;
            }
            return(Answer);
        }