-
- public string GroupJudge()
- {
- Database db = HostApplicationServices.WorkingDatabase;
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- PromptEntityResult per = doc.Editor.GetEntity("\nspecify an object in a group");
- if (per.Status == PromptStatus.OK)
- {
- string groupname = GroupJudge(per.ObjectId);
- if (groupname != "")
- {
- return groupname;
- }
- }
- ed.WriteMessage("\nno group will be edit");
- return "";//方法定义有输出结果,需指定默认返回值
- }
- public string GroupJudge(ObjectId oid)
- {
- Database db = HostApplicationServices.WorkingDatabase;
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- using (Transaction trans = db.TransactionManager.StartTransaction())
- {
- Entity ent = (Entity)trans.GetObject(oid, OpenMode.ForWrite, false);
- DBDictionary GroDic = (DBDictionary)trans.GetObject(db.GroupDictionaryId, OpenMode.ForWrite);
- Group gro;
- string groname = "";
- int i = 0;
- Stack mystack = new Stack();
- foreach (DBDictionaryEntry groRec in GroDic)//DBDictionary由DBDictionaryEntry组成
- {
- gro = (Group)trans.GetObject(groRec.Value, OpenMode.ForWrite);//Group继承自DBDictionaryEntry,并且DBDictionaryEntry正好就是Group
- if (gro.Has(ent))
- {
- groname = gro.Name;
- mystack.Push(groname);
- i++;
- }
- }
- if (i == 1)
- {
- gro = (Group)trans.GetObject(GroDic.GetAt((string)mystack.Pop()), OpenMode.ForWrite);
- gro.SetHighlight(true);
- ed.WriteMessage(string.Format("\n{0},{1}", groname, Convert.ToString(i)));
- trans.Commit();
- return groname;
- }
- while (mystack.Count != 0)
- {
- gro = (Group)trans.GetObject(GroDic.GetAt((string)mystack.Pop()), OpenMode.ForWrite);
- gro.SetHighlight(true);
- PromptKeywordOptions pko = new PromptKeywordOptions(string.Format("\n{0},{1}", gro.Name, Convert.ToString(i)));
- pko.Keywords.Add("This");
- pko.Keywords.Add("Next");
- pko.Keywords.Default = "This";
- PromptResult pkr = doc.Editor.GetKeywords(pko);
- switch (pkr.StringResult)
- {
- case "This":
- trans.Commit();
- return gro.Name;
- case "Next":
- gro.SetHighlight(false);
- break;
- default:
- goto case "Next";
- }
- }
- trans.Commit();
- }
- return "";//方法定义有输出结果,需指定默认返回值
- }
- [CommandMethod("gx")]//把所有组炸开
- public void GroupAllExplode()
- {
- Database db = HostApplicationServices.WorkingDatabase;
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- using (Transaction trans = db.TransactionManager.StartTransaction())
- {
- DBDictionary GroDic = (DBDictionary)trans.GetObject(db.GroupDictionaryId, OpenMode.ForWrite);
- foreach (DBDictionaryEntry groRec in GroDic)
- {
- Group gro = (Group)trans.GetObject(groRec.Value, OpenMode.ForWrite);
- gro.Erase();
- }
- ed.WriteMessage("\nall group was explode");
- trans.Commit();
- }
- }
- [CommandMethod("gs")]//所有组组选
- public void GroupAllSelectable()
- {
- Database db = HostApplicationServices.WorkingDatabase;
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- using (Transaction trans = db.TransactionManager.StartTransaction())
- {
- DBDictionary GroDic = (DBDictionary)trans.GetObject(db.GroupDictionaryId, OpenMode.ForWrite);
- foreach (DBDictionaryEntry groRec in GroDic)
- {
- Group gro = (Group)trans.GetObject(groRec.Value, OpenMode.ForWrite);
- gro.Selectable = true;
- gro.SetHighlight(false);
- }
- object oGroupSelect = Application.GetSystemVariable("PICKSTYLE");
- if (Convert.ToInt16(oGroupSelect) != 1)
- {
- Application.SetSystemVariable("PICKSTYLE", 1);
- }
- ed.WriteMessage("\nall group is selectable");
- doc.Database.BeginSave -= saveEvent;//先取消订阅,后订阅事件,防止重复订阅
- doc.Database.BeginSave += saveEvent;//订阅beginsave事件,事件引发包含ge命令DE方法saveEvent
- trans.Commit();
- }
|