Distinguished Contributor
109 Posts
7 Kudos
Registered: ‎04-05-2012
Post 1 of 5


308 Views, 4 Replies
02-20-2013 08:24 AM

I change the paper format on a layout with:


PlotSettingsValidator.SetPlotConfigurationName(layout, deviceName, media)

 But the paper doesn't update when I reduce the size (A0 to A1 for example). I've found that I have to call:


plSetVal.SetZoomToPaperOnUpdate(layout, true);
UpdateCurrentPaper(LayoutManager.Current.UnmanagedObject, true);

In order to force the update. AcApLayoutManager::updateCurrentPaper is not exposed in the .NET API, so I had to P/Invoke it. On AutoCAD 2013, I've found it in accore.dll, but I'm not able to found it on AutoCAD 2010. Someone knows where I can found it? Or a workaround? The doc says that the update may be triggered after the call to SetZoomToPaperOnUpdate by a notification, but how to force the sending of this kind of notification without updateCurrentPaper?

Active Member
9 Posts
1 Kudo
Registered: ‎06-13-2003
Post 2 of 5

Re: UpdateCurrentPaper

02-26-2013 02:29 PM in reply to: FRFR1426

Have you tried to call:




Distinguished Contributor
109 Posts
7 Kudos
Registered: ‎04-05-2012
Post 3 of 5

Re: UpdateCurrentPaper

02-26-2013 10:41 PM in reply to: FRFR1426
Yes, and UpdateScreen too. Only UpdateCurrentPaper seems to work.
1,467 Posts
277 Kudos
Registered: ‎04-09-2008
Post 4 of 5

Re: UpdateCurrentPaper

02-27-2013 01:28 AM in reply to: FRFR1426

FRFR1426 wrote:
...AcApLayoutManager::updateCurrentPaper is not exposed in the .NET API, so I had to P/Invoke it. On AutoCAD 2013, I've found it in accore.dll, but I'm not able to found it on AutoCAD 2010. Someone knows where I can found it? Or a workaround?...

It is look like you have to write wrapper (with ObjectARX C++) for this method.

Пожалуйста не забывайте про Утвердить в качестве решения! Утвердить в качестве решения и Give Kudos!Баллы
Please remember to Accept Solution! Accept as Solution and Give Kudos!Kudos

Active Member
9 Posts
1 Kudo
Registered: ‎06-13-2003
Post 5 of 5

Re: UpdateCurrentPaper

02-27-2013 07:27 AM in reply to: FRFR1426

I have used the following code to update the paper size and other properties of a plot settings object for a layout without any problems.  Maybe it will help you.  If not, then the only other option is to P/Invoke the method you mention.  I do remember having some strange issues with getting the paper size to display correctly when I was working on my AU handouts, but did manage to work around it though and did not need to P/Invoke any extra functions.


Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.PlottingServices

' Creates a new page setup or edits the page set if it exists
<CommandMethod("CreateOrEditPageSetup")> _
Public Shared Sub CreateOrEditPageSetup()
    ' Get the current document and database, and start a transaction
    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
    Dim acCurDb As Database = acDoc.Database

    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

        Dim plSets As DBDictionary = _
            acTrans.GetObject(acCurDb.PlotSettingsDictionaryId, OpenMode.ForRead)
        Dim vStyles As DBDictionary = _
            acTrans.GetObject(acCurDb.VisualStyleDictionaryId, OpenMode.ForRead)

        Dim acPlSet As PlotSettings
        Dim createNew As Boolean = False

        ' Reference the Layout Manager
        Dim acLayoutMgr As LayoutManager = LayoutManager.Current

        ' Get the current layout and output its name in the Command Line window
        Dim acLayout As Layout = _
            acTrans.GetObject(acLayoutMgr.GetLayoutId(acLayoutMgr.CurrentLayout), _

        ' Check to see if the page setup exists
        If plSets.Contains("MyPageSetup") = False Then
            createNew = True

            ' Create a new PlotSettings object: 
            '    True - model space, False - named layout
            acPlSet = New PlotSettings(acLayout.ModelType)

            acPlSet.PlotSettingsName = "MyPageSetup"
            acTrans.AddNewlyCreatedDBObject(acPlSet, True)
            acPlSet = plSets.GetAt("MyPageSetup").GetObject(OpenMode.ForWrite)
        End If

        ' Update the PlotSettings object
            Dim acPlSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current

            ' Set the Plotter and page size
            acPlSetVdr.SetPlotConfigurationName(acPlSet, _
                                                "DWF6 ePlot.pc3", _

            ' Set to plot to the current display
            If acLayout.ModelType = False Then
                acPlSetVdr.SetPlotType(acPlSet, _
                acPlSetVdr.SetPlotType(acPlSet, _

                acPlSetVdr.SetPlotCentered(acPlSet, True)
            End If

            ' Use SetPlotWindowArea with PlotType.Window
            'acPlSetVdr.SetPlotWindowArea(plSet, _
            '                             New Extents2d(New Point2d(0.0, 0.0), _
            '                             New Point2d(9.0, 12.0)))

            ' Use SetPlotViewName with PlotType.View
            'acPlSetVdr.SetPlotViewName(plSet, "MyView")

            ' Set the plot offset
            acPlSetVdr.SetPlotOrigin(acPlSet, _
                                     New Point2d(0, 0))

            ' Set the plot scale
            acPlSetVdr.SetUseStandardScale(acPlSet, True)
            acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.ScaleToFit)
            acPlSetVdr.SetPlotPaperUnits(acPlSet, PlotPaperUnit.Inches)
            acPlSet.ScaleLineweights = True

            ' Specify if plot styles should be displayed on the layout
            acPlSet.ShowPlotStyles = True

            ' Rebuild plotter, plot style, and canonical media lists 
            ' (must be called before setting the plot style)

            ' Specify the shaded viewport options
            acPlSet.ShadePlot = PlotSettingsShadePlotType.AsDisplayed

            acPlSet.ShadePlotResLevel = ShadePlotResLevel.Normal

            ' Specify the plot options
            acPlSet.PrintLineweights = True
            acPlSet.PlotTransparency = False
            acPlSet.PlotPlotStyles = True
            acPlSet.DrawViewportsFirst = True

            ' Use only on named layouts - Hide paperspace objects option
            ' plSet.PlotHidden = True

            ' Specify the plot orientation
            acPlSetVdr.SetPlotRotation(acPlSet, PlotRotation.Degrees000)

            ' Set the plot style
            If acCurDb.PlotStyleMode = True Then
                acPlSetVdr.SetCurrentStyleSheet(acPlSet, "acad.ctb")
                acPlSetVdr.SetCurrentStyleSheet(acPlSet, "acad.stb")
            End If

            ' Zoom to show the whole paper
            acPlSetVdr.SetZoomToPaperOnUpdate(acPlSet, True)
        Catch es As Autodesk.AutoCAD.Runtime.Exception
        End Try

        ' Save the changes made

        If createNew = True Then
        End If
    End Using
End Sub


Post to the Community

Have questions about Autodesk products? Ask the community.

New Post
Are you interested in helping shape the future of the Autodesk Community? To participate in this brief usability study, please click here. Your time and input is greatly appreciated!