<?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>

Leave a Reply