Setting layer color override for a viewport using AccoreConsole

<?xml encoding=”UTF-8″>By Balaji Ramamoorthy

Here is a code snippet to set the layer color override for the viewports in all the layouts in a drawing. AccoreConsole can be used to automate setting this override, if you need to repeat this for several drawings in a folder. Here is the AutoCAD script and the custom command to set the override for a layer named “Layer 1” :

 ;<--- Script starts here
 (command <span>"_.Netload"</span><span>  <span>"D:\\Temp\\CustomPlugin.dll"</span><span> )</span></span>
 SetLayerColorOverride
 SAVEAS
 2013
 D:\Temp\Test_1.dwg
 
 ;<--- Script ends here
 
 <span>using</span><span>  Autodesk.AutoCAD.Runtime; </span>
 <span>using</span><span>  Autodesk.AutoCAD.EditorInput; </span>
 <span>using</span><span>  Autodesk.AutoCAD.DatabaseServices; </span>
 <span>using</span><span>  Autodesk.AutoCAD.ApplicationServices; </span>
 <span>using</span><span>  Autodesk.AutoCAD.Colors;</span>
 
 [CommandMethod(<span>"SetLayerColorOverride"</span><span> )]</span>
 <span>public</span><span>  <span>void</span><span>  SetLayerColorOverride()</span></span>
 <span>{</span>
     DocumentCollection docs 
     = Autodesk.AutoCAD.ApplicationServices
         .Core.Application.DocumentManager;
 
     Document doc = docs.MdiActiveDocument;
     Editor ed = doc.Editor;
     Database db = doc.Database;
 
     db.TileMode = <span>false</span><span> ;</span>
     LayoutManager lm = LayoutManager.Current;
     <span>using</span><span>  (Transaction tr </span>
         = db.TransactionManager.StartTransaction())
     <span>{</span>
         LayerTable lt = tr.GetObject(
             db.LayerTableId, 
             OpenMode.ForWrite, <span>false</span><span> ) <span>as</span><span>  LayerTable;</span></span>
 
         String layerName = <span>"Layer1"</span><span> ;</span>
         <span>if</span><span>  (!lt.Has(layerName))</span>
             <span>return</span><span> ;</span>
 
         LayerTableRecord ltr = tr.GetObject(
             lt[layerName], 
             OpenMode.ForWrite) <span>as</span><span>  LayerTableRecord;</span>
 
         <span>using</span><span>  (DBDictionary layoutDict = tr.GetObject(</span>
             db.LayoutDictionaryId, 
             OpenMode.ForRead) <span>as</span><span>  DBDictionary)</span>
         <span>{</span>
             <span>foreach</span><span>  (DBDictionaryEntry entry <span>in</span><span>  layoutDict)</span></span>
             <span>{</span>
                 ObjectId layoutId = entry.Value;
 
                 Layout layout = tr.GetObject(
                     layoutId, 
                     OpenMode.ForRead) <span>as</span><span>  Layout;</span>
                 lm.CurrentLayout = layout.LayoutName;
 
                 BlockTableRecord btr = tr.GetObject(
                     layout.BlockTableRecordId, 
                     OpenMode.ForRead) <span>as</span><span>  BlockTableRecord;</span>
                 <span>foreach</span><span>  (ObjectId id <span>in</span><span>  btr)</span></span>
                 <span>{</span>
                     <span>if</span><span>  (id.ObjectClass </span>
                         == RXClass.GetClass(<span>typeof</span><span> (Viewport)))</span>
                     <span>{</span>
                         Viewport vp = tr.GetObject(
                             id, OpenMode.ForRead) <span>as</span><span>  Viewport;</span>
                         <span>if</span><span>  (vp != <span>null</span><span>  && vp.Number > 1)</span></span>
                         <span>{</span>
                             LayerViewportProperties lvp 
                                 = ltr.GetViewportOverrides(id);
                             lvp.Color 
                                 = Color.FromColorIndex(
                                 ColorMethod.ByAci, (<span>short</span><span> )vp.Number);</span>
                             vp.UpdateDisplay();
                         <span>}</span>
                     <span>}</span>
                 <span>}</span>
             <span>}</span>
         <span>}</span>
         tr.Commit();
     <span>}</span>
 <span>}</span>
 


Comments

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading