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

08/09/2015

Устанавливаем переопределение цвета слоя для ВЭкрана используя AccoreConsole

Этот пример кода устанавливает переопределение для цвета слоя для всех ВЭкранов во всех листах чертежа. Можно использовать AccoreConsole для автоматизации этого переопределения в случае если эту операцию нужно повторить для множества чертежей в каталоге. Вот скрипт AutoCAD и пользовательская команда для переопределения слоя "Слой1" :

Код: [Выделить]
  1. ;--- Начало скрипта
  2.  (command "_.Netload"  "D:\\Temp\\CustomPlugin.dll")
  3.  SetLayerColorOverride
  4.  _SAVEAS
  5.  2013
  6.  D:\Temp\Test_1.dwg
  7.  
  8.  ;--- Конец скрипта

Код - C#: [Выделить]
  1.  using  Autodesk.AutoCAD.Runtime;
  2.  using  Autodesk.AutoCAD.EditorInput;
  3.  using  Autodesk.AutoCAD.DatabaseServices;
  4.  using  Autodesk.AutoCAD.ApplicationServices;
  5.  using  Autodesk.AutoCAD.Colors;
  6.  
  7.  [CommandMethod("SetLayerColorOverride" )]
  8.  public  void  SetLayerColorOverride()
  9.  {
  10.      DocumentCollection docs
  11.      = Autodesk.AutoCAD.ApplicationServices
  12.          .Core.Application.DocumentManager;
  13.  
  14.      Document doc = docs.MdiActiveDocument;
  15.      Editor ed = doc.Editor;
  16.      Database db = doc.Database;
  17.  
  18.      db.TileMode = false ;
  19.      LayoutManager lm = LayoutManager.Current;
  20.      using  (Transaction tr
  21.          = db.TransactionManager.StartTransaction())
  22.      {
  23.          LayerTable lt = tr.GetObject(
  24.              db.LayerTableId,
  25.              OpenMode.ForWrite, false ) as  LayerTable;
  26.  
  27.          String layerName = "Слой1" ;
  28.          if  (!lt.Has(layerName))
  29.              return ;
  30.  
  31.          LayerTableRecord ltr = tr.GetObject(
  32.              lt[layerName],
  33.              OpenMode.ForWrite) as  LayerTableRecord;
  34.  
  35.          using  (DBDictionary layoutDict = tr.GetObject(
  36.              db.LayoutDictionaryId,
  37.              OpenMode.ForRead) as  DBDictionary)
  38.          {
  39.              foreach  (DBDictionaryEntry entry in  layoutDict)
  40.              {
  41.                  ObjectId layoutId = entry.Value;
  42.  
  43.                  Layout layout = tr.GetObject(
  44.                      layoutId,
  45.                      OpenMode.ForRead) as  Layout;
  46.                  lm.CurrentLayout = layout.LayoutName;
  47.  
  48.                  BlockTableRecord btr = tr.GetObject(
  49.                      layout.BlockTableRecordId,
  50.                      OpenMode.ForRead) as  BlockTableRecord;
  51.                  foreach  (ObjectId id in  btr)
  52.                  {
  53.                      if  (id.ObjectClass
  54.                          == RXClass.GetClass(typeof (Viewport)))
  55.                      {
  56.                          Viewport vp = tr.GetObject(
  57.                              id, OpenMode.ForRead) as  Viewport;
  58.                          if  (vp != null  && vp.Number > 1)
  59.                          {
  60.                              LayerViewportProperties lvp
  61.                                  = ltr.GetViewportOverrides(id);
  62.                              lvp.Color
  63.                                  = Color.FromColorIndex(
  64.                                  ColorMethod.ByAci, (short )vp.Number);
  65.                              vp.UpdateDisplay();
  66.                          }
  67.                      }
  68.                  }
  69.              }
  70.          }
  71.          tr.Commit();
  72.      }
  73.  }

 

Источник: http://adndevblog.typepad.com/autocad/2015/08/setting-layer-color-override-for-a-viewport-using-accoreconsole.html

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

Обсуждение: http://adn-cis.org/forum/index.php?topic=2993

Опубликовано 08.09.2015
Отредактировано 08.09.2015 в 07:59:12