示例#1
0
        public static void RDP()
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Editor   ed  = doc.Editor;



            TypedValue[] tvs = new TypedValue[2] {
                new TypedValue(8, "*"), new TypedValue(0, "AECC_COGO_POINT")
            };

            SelectionFilter filter = new SelectionFilter(tvs);

            PromptSelectionOptions pso = new PromptSelectionOptions();

            pso.MessageForAdding = "\nSelect Points to Filter:";

            PromptSelectionResult psr = ed.GetSelection(pso, filter);

            if (psr.Status == PromptStatus.Cancel)
            {
                return;
            }

            SelectionSet ss = psr.Value;

            ObjectId[]      ids       = ss.GetObjectIds();
            List <ObjectId> idsPicked = new List <ObjectId>();

            for (int i = 0; i < ids.Length; i++)
            {
                idsPicked.Add(ids[i]);
            }

            List <ObjectId> idsCgPntsFound = new List <ObjectId>();

            int k = 0;

            foreach (ObjectId idPick in idsPicked)
            {
                if (!idPick.IsValid || idPick.IsEffectivelyErased || idPick.IsErased)
                {
                    continue;
                }

                Point3d pnt3dP = idPick.getCogoPntCoordinates();

                idsCgPntsFound = CgPnt.checkForCogoPointsByNode(pnt3dP);

                if (idsCgPntsFound.Count == 1)      //no duplicate - done with pick
                {
                    continue;
                }

                foreach (ObjectId idFound in idsCgPntsFound) //duplicates found
                {
                    if (idFound == idPick)                   //we found all cogo points at pick xy including pick
                    {
                        continue;
                    }

                    ResultBuffer rbF = idFound.getXData(null);
                    ResultBuffer rbP = idPick.getXData(null);

                    if (rbF == null)
                    {
                        idFound.delete();
                        k++;
                    }
                    else if (rbP == null)
                    {
                        idPick.delete();
                        k++;
                    }
                }
            }

            Application.ShowAlertDialog(string.Format("{0} Duplicated Point(s) Deleted", k));
        }