<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Viewport Layer Control? in .NET Forum</title>
    <link>https://forums.autodesk.com/t5/net-forum/viewport-layer-control/m-p/2624517#M67323</link>
    <description>Hi,&lt;BR /&gt;
&lt;BR /&gt;
The Viewport class provides a FreezeLayersInViewport method...</description>
    <pubDate>Fri, 29 Jan 2010 19:38:40 GMT</pubDate>
    <dc:creator>_gile</dc:creator>
    <dc:date>2010-01-29T19:38:40Z</dc:date>
    <item>
      <title>Viewport Layer Control?</title>
      <link>https://forums.autodesk.com/t5/net-forum/viewport-layer-control/m-p/2624516#M67322</link>
      <description>I would like create a new layer and freeze it in all existing layout viewports.  I've searched high and low for a vb.net example and have not had any success.  If any of you good people could shed some light on how viewport layers are controlled I would be very thankful.</description>
      <pubDate>Fri, 29 Jan 2010 19:04:51 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/viewport-layer-control/m-p/2624516#M67322</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2010-01-29T19:04:51Z</dc:date>
    </item>
    <item>
      <title>Re: Viewport Layer Control?</title>
      <link>https://forums.autodesk.com/t5/net-forum/viewport-layer-control/m-p/2624517#M67323</link>
      <description>Hi,&lt;BR /&gt;
&lt;BR /&gt;
The Viewport class provides a FreezeLayersInViewport method...</description>
      <pubDate>Fri, 29 Jan 2010 19:38:40 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/viewport-layer-control/m-p/2624517#M67323</guid>
      <dc:creator>_gile</dc:creator>
      <dc:date>2010-01-29T19:38:40Z</dc:date>
    </item>
    <item>
      <title>Re: Viewport Layer Control?</title>
      <link>https://forums.autodesk.com/t5/net-forum/viewport-layer-control/m-p/2624518#M67324</link>
      <description>Here's a little C#  sample (if needed, google for convert C# VB")&lt;BR /&gt;
&lt;BR /&gt;
{code}using Autodesk.AutoCAD.ApplicationServices;&lt;BR /&gt;
using Autodesk.AutoCAD.Colors;&lt;BR /&gt;
using Autodesk.AutoCAD.DatabaseServices;&lt;BR /&gt;
using Autodesk.AutoCAD.Runtime;&lt;BR /&gt;
&lt;BR /&gt;
namespace ClassLibrary1&lt;BR /&gt;
{&lt;BR /&gt;
    public class Class1&lt;BR /&gt;
    {&lt;BR /&gt;
        [CommandMethod("TEST")]&lt;BR /&gt;
        public static void Test()&lt;BR /&gt;
        {&lt;BR /&gt;
            Document doc = Application.DocumentManager.MdiActiveDocument;&lt;BR /&gt;
            Database db = doc.Database;&lt;BR /&gt;
            using (Transaction tr = db.TransactionManager.StartTransaction())&lt;BR /&gt;
            {&lt;BR /&gt;
                // Create a new layer named "Test" color 30&lt;BR /&gt;
                LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForWrite);&lt;BR /&gt;
                if (!lt.Has("Test"))&lt;BR /&gt;
                {&lt;BR /&gt;
                    LayerTableRecord ltr = new LayerTableRecord();&lt;BR /&gt;
                    ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 30);&lt;BR /&gt;
                    ltr.Name = "Test";&lt;BR /&gt;
                    ObjectId layerId = lt.Add(ltr);&lt;BR /&gt;
                    tr.AddNewlyCreatedDBObject(ltr, true);&lt;BR /&gt;
                }&lt;BR /&gt;
&lt;BR /&gt;
                // Freeze "Test" layer in all viewports&lt;BR /&gt;
                ObjectId[] ids = new ObjectId[1] { layerId };&lt;BR /&gt;
                DBDictionary layoutDict = (DBDictionary)tr.GetObject(db.LayoutDictionaryId, OpenMode.ForRead);&lt;BR /&gt;
                foreach (DBDictionaryEntry entry in layoutDict)&lt;BR /&gt;
                {&lt;BR /&gt;
                    if (entry.Key != "Model")&lt;BR /&gt;
                    {&lt;BR /&gt;
                        Layout lay = (Layout)tr.GetObject(entry.Value, OpenMode.ForRead);&lt;BR /&gt;
                        foreach (ObjectId vpId in lay.GetViewports())&lt;BR /&gt;
                        {&lt;BR /&gt;
                            Viewport vp = (Viewport)tr.GetObject(vpId, OpenMode.ForWrite);&lt;BR /&gt;
                            vp.FreezeLayersInViewport(ids.GetEnumerator());&lt;BR /&gt;
                        }&lt;BR /&gt;
                    }&lt;BR /&gt;
                }&lt;BR /&gt;
&lt;BR /&gt;
                tr.Commit();&lt;BR /&gt;
            }&lt;BR /&gt;
        }&lt;BR /&gt;
    }&lt;BR /&gt;
}&lt;BR /&gt;
{code}</description>
      <pubDate>Fri, 29 Jan 2010 22:00:04 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/viewport-layer-control/m-p/2624518#M67324</guid>
      <dc:creator>_gile</dc:creator>
      <dc:date>2010-01-29T22:00:04Z</dc:date>
    </item>
    <item>
      <title>Re: Viewport Layer Control?</title>
      <link>https://forums.autodesk.com/t5/net-forum/viewport-layer-control/m-p/2624519#M67325</link>
      <description>Very useful.  Your code has gotten me along way to completing my task.  I'm having an issue running my version of your code from a paletteset.  I've created a Class Vport with a New() subroutine that creates the layers and a FreezeLayersInAllLayouts() subroutine that freezes the newly created layers in all viewport but the current.  A button on the paletteset creates a New Vport class object then freezes the layer then draw some entities in the current viewport.  If I step through FreezeLayersInAllLayouts() in the debugger all works fine.  If I run FreezeLayersInAllLayouts() without debugging the routine has no effect on the layer state in all the other viewports.  See the following code for my adaptation of your code.&lt;BR /&gt;
&lt;BR /&gt;
Imports Autodesk.AutoCAD.ApplicationServices&lt;BR /&gt;
Imports Autodesk.AutoCAD.DatabaseServices&lt;BR /&gt;
Imports Autodesk.AutoCAD.EditorInput&lt;BR /&gt;
Imports Autodesk.AutoCAD.Runtime&lt;BR /&gt;
Imports Autodesk.AutoCAD.Colors&lt;BR /&gt;
Imports Autodesk.AutoCAD.Geometry&lt;BR /&gt;
&lt;BR /&gt;
Public Class Vport&lt;BR /&gt;
    Private CVport As Viewport&lt;BR /&gt;
    Private CVportName As String&lt;BR /&gt;
    Private LayerIds(2) As ObjectId&lt;BR /&gt;
&lt;BR /&gt;
    Public Sub New()&lt;BR /&gt;
        Dim doc As Document = Application.DocumentManager.MdiActiveDocument&lt;BR /&gt;
        Dim ed As Editor = doc.Editor&lt;BR /&gt;
        Dim db As Database = doc.Database&lt;BR /&gt;
        Using DocLock As DocumentLock = Application.DocumentManager.MdiActiveDocument.LockDocument()&lt;BR /&gt;
            Using tr As Transaction = db.TransactionManager.StartTransaction()&lt;BR /&gt;
                CVport = DirectCast(tr.GetObject(ed.CurrentViewportObjectId, OpenMode.ForRead), Viewport)&lt;BR /&gt;
                Dim lt As LayerTable = DirectCast(tr.GetObject(db.LayerTableId, OpenMode.ForWrite), LayerTable)&lt;BR /&gt;
                Dim layerid As ObjectId&lt;BR /&gt;
                If Not lt.Has("PH-" + CVport.Handle.ToString()) Then&lt;BR /&gt;
                    Dim ltr As LayerTableRecord = New LayerTableRecord()&lt;BR /&gt;
                    ltr.Name = "PH-" + CVport.Handle.ToString()&lt;BR /&gt;
                    ltr.Color = Color.FromColorIndex(ColorMethod.ByColor, 8)&lt;BR /&gt;
                    ltr.ViewportVisibilityDefault = True&lt;BR /&gt;
                    layerid = lt.Add(ltr)&lt;BR /&gt;
                    LayerIds(0) = layerid&lt;BR /&gt;
                    tr.AddNewlyCreatedDBObject(ltr, True)&lt;BR /&gt;
                End If&lt;BR /&gt;
                If Not lt.Has("PT-" + CVport.Handle.ToString()) Then&lt;BR /&gt;
                    Dim ltr As LayerTableRecord = New LayerTableRecord()&lt;BR /&gt;
                    ltr.Name = "PT-" + CVport.Handle.ToString()&lt;BR /&gt;
                    ltr.Color = Color.FromColorIndex(ColorMethod.ByColor, 6)&lt;BR /&gt;
                    ltr.ViewportVisibilityDefault = True&lt;BR /&gt;
                    layerid = lt.Add(ltr)&lt;BR /&gt;
                    LayerIds(1) = layerid&lt;BR /&gt;
                    tr.AddNewlyCreatedDBObject(ltr, True)&lt;BR /&gt;
                End If&lt;BR /&gt;
                If Not lt.Has("PV-" + CVport.Handle.ToString()) Then&lt;BR /&gt;
                    Dim ltr As LayerTableRecord = New LayerTableRecord()&lt;BR /&gt;
                    ltr.Name = "PV-" + CVport.Handle.ToString()&lt;BR /&gt;
                    ltr.Color = Color.FromColorIndex(ColorMethod.ByColor, 3)&lt;BR /&gt;
                    ltr.ViewportVisibilityDefault = True&lt;BR /&gt;
                    layerid = lt.Add(ltr)&lt;BR /&gt;
                    LayerIds(2) = layerid&lt;BR /&gt;
                    tr.AddNewlyCreatedDBObject(ltr, True)&lt;BR /&gt;
                End If&lt;BR /&gt;
                tr.Commit()&lt;BR /&gt;
            End Using&lt;BR /&gt;
        End Using&lt;BR /&gt;
    End Sub&lt;BR /&gt;
&lt;BR /&gt;
    Public Sub FreezeLayersInAllLayouts()&lt;BR /&gt;
        Dim doc As Document = Application.DocumentManager.MdiActiveDocument&lt;BR /&gt;
        Dim ed As Editor = doc.Editor&lt;BR /&gt;
        Dim db As Database = doc.Database&lt;BR /&gt;
        Using DocLock As DocumentLock = Application.DocumentManager.MdiActiveDocument.LockDocument()&lt;BR /&gt;
            Using tr As Transaction = db.TransactionManager.StartTransaction()&lt;BR /&gt;
                Dim layoutdict As DBDictionary = DirectCast(tr.GetObject(db.LayoutDictionaryId, OpenMode.ForRead, False, True), DBDictionary)&lt;BR /&gt;
                For Each entry As DBDictionaryEntry In layoutdict&lt;BR /&gt;
                    If entry.Key &amp;lt;&amp;gt; "Model" Then&lt;BR /&gt;
                        Dim lay As Layout = DirectCast(tr.GetObject(entry.Value, OpenMode.ForRead, False, True), Layout)&lt;BR /&gt;
                        For Each vpid As ObjectId In lay.GetViewports()&lt;BR /&gt;
                            Dim vp As Viewport = DirectCast(tr.GetObject(vpid, OpenMode.ForWrite, False, True), Viewport)&lt;BR /&gt;
                            If (vp.Handle &amp;lt;&amp;gt; CVport.Handle) Then&lt;BR /&gt;
                                vp.FreezeLayersInViewport(LayerIds.GetEnumerator())&lt;BR /&gt;
                            End If&lt;BR /&gt;
                        Next&lt;BR /&gt;
                    End If&lt;BR /&gt;
                Next&lt;BR /&gt;
                tr.Commit()&lt;BR /&gt;
            End Using&lt;BR /&gt;
        End Using&lt;BR /&gt;
    End Sub&lt;BR /&gt;
&lt;BR /&gt;
    Public Sub DrawTimbers(ByVal SS As SelectionSet)&lt;BR /&gt;
...&lt;BR /&gt;
    End Sub&lt;BR /&gt;
&lt;BR /&gt;
End Class</description>
      <pubDate>Mon, 01 Feb 2010 17:47:43 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/net-forum/viewport-layer-control/m-p/2624519#M67325</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2010-02-01T17:47:43Z</dc:date>
    </item>
  </channel>
</rss>

