ADN Open CIS
Сообщество программистов Autodesk в СНГ

30/08/2020

Как изменить цвет ПСЕВДОРАЗРЕЗА (LIVESECTION)?

Вопрос: Как изменить цвет ПСЕВДОРАЗРЕЗа (LIVESECTION)?  Можно ли это сделать при помощи API?

Ответ: Средствами AutoCAD .NET API это возможно. Для этой цели необходимо задать цвет при помощи SectionSettings:

Код - C#: [Выделить]
  1. [CommandMethod("SetLiveSectionColor")]
  2. public void SetLiveSectionColor()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   if (doc == null) return;
  6.   Editor ed = doc.Editor;
  7.   ObjectId idLiveSect = ObjectId.Null;
  8.   ObjectId idSecSets = ObjectId.Null;    // Находим LIVESECTION - он может быть только один
  9.   using (Transaction tr = doc.TransactionManager.StartOpenCloseTransaction())
  10.   {
  11.     SectionManager sm = tr.GetObject(doc.Database.SectionManagerId, OpenMode.ForRead) as SectionManager;
  12.     if (sm != null) {
  13.       idLiveSect = sm.LiveSection;
  14.       Section sec = tr.GetObject(sm.LiveSection, OpenMode.ForRead) as Section;
  15.       idSecSets = sec.Settings;
  16.     }
  17.     tr.Commit();
  18.   }
  19.   if (idSecSets != ObjectId.Null)
  20.   {
  21.     using (Transaction tr = doc.TransactionManager.StartOpenCloseTransaction())
  22.     {
  23.       SectionSettings secset = tr.GetObject(idSecSets, OpenMode.ForWrite) as SectionSettings;
  24.       Color clr = secset.Color(SectionType.LiveSection, SectionGeometry.IntersectionFill);
  25.       ColorDialog cd = new ColorDialog();
  26.       cd.Color = clr;
  27.       System.Windows.Forms.DialogResult dr = cd.ShowDialog();
  28.       if (dr != System.Windows.Forms.DialogResult.OK) return;
  29.       ed.WriteMessage("\nВыбран цвет: " + cd.Color.ToString());
  30.       clr = cd.Color;
  31.       // Определяет цвет чего мы меняем
  32.       secset.SetColor(SectionType.LiveSection, SectionGeometry.IntersectionFill, clr);
  33.       tr.Commit();
  34.     }
  35.     short _cmdecho = (short)Application.GetSystemVariable("CMDECHO");
  36.     Application.SetSystemVariable("CMDECHO", 0);
  37.     ed.Command("_LIVESECTION", idLiveSect); // Отключаем LIVESECTION
  38.     ed.Command("_LIVESECTION", idLiveSect); // Включаем LIVESECTION
  39.     Application.SetSystemVariable("CMDECHO", _cmdecho);
  40.   }
  41. }

 

 

Автор: Александр Ривилис
Опубликовано 30.08.2020