Activate current viewport in a layout tab

Activate current viewport in a layout tab

MrBeann
Contributor Contributor
930 Views
5 Replies
Message 1 of 6

Activate current viewport in a layout tab

MrBeann
Contributor
Contributor

I have 2 viewports (VP1 and VP2) in a layout tab (Layout 1). I want to select viewport VP2 and activate this viewport to work with it. I can select VP2 but if I use SwitchToModelSpace() or "MSPACE" command, it only works with VP1.

Please help me. Thanks!  

0 Likes
Accepted solutions (2)
931 Views
5 Replies
Replies (5)
Message 2 of 6

_gile
Consultant
Consultant
Accepted solution

Hi,

 

You can set the CVPORT system variable with the value of the Viewport.Number property.



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 3 of 6

MrBeann
Contributor
Contributor
<CommandMethod("VPSELECT", CommandFlags.Redraw Or CommandFlags.NoTileMode)>
    Public Shared Sub VPSelectCommand()
        Dim doc As Document = Application.DocumentManager.MdiActiveDocument
        Dim ed As Editor = doc.Editor
        Dim db As Database = doc.Database
        ed.SwitchToPaperSpace()
        Dim peo = New PromptEntityOptions(vbLf & "Select viewport: ")
        peo.SetRejectMessage(vbLf & "Requires a Viewport")
        peo.AddAllowedClass(GetType(Viewport), False)
        Dim result As PromptEntityResult = ed.GetEntity(peo)
        If result.Status <> PromptStatus.OK Then Return

        Using tr = New OpenCloseTransaction()
            Dim viewport As Viewport = CType(tr.GetObject(result.ObjectId, OpenMode.ForRead), Viewport)

            Application.SetSystemVariable("cvport", viewport.Number)

            ed.SwitchToModelSpace()

        End Using
    End Sub

I tried this code and get error "eInvalidInput" at "ed.SwitchToModelSpace()"

0 Likes
Message 4 of 6

MrBeann
Contributor
Contributor

 

<DllImport("accore.dll", CallingConvention:=CallingConvention.Cdecl, EntryPoint:="?acedSetCurrentVPort@@YA?AW4ErrorStatus@Acad@@PEBVAcDbViewport@@@Z")>'?acedSetCurrentVPort@@YA?AW4ErrorStatus@Acad@@PBVAcDbViewport@@@Z")>
    Public Shared Function acedSetCurrentVPort(ByVal AcDbVport As IntPtr) As IntPtr
    End Function

acedSetCurrentVPort(viewport.UnmanagedObject)

 

I tried this code above too and put "viewport.On = True" also don't work.

0 Likes
Message 5 of 6

_gile
Consultant
Consultant
Accepted solution

You have to SwitchToModelSpace before setting the CVPORT sysvar.



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 6 of 6

MrBeann
Contributor
Contributor
This worked! Thank you!
0 Likes