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?
@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.
ŠŃŠ“ŠæŠ¾Š²ŃŠ“Ń ŠŗŠ¾ŃŠøŃŠ½Š°? ŠŠ»ŃŠŗŠ½ŃŃŃ Š½Š° "ŠŠŠŠŠŠŠŠŠŠ£" ŃŃŠ¼ ŠæŠ¾Š²ŃŠ“Š¾Š¼Š»ŠµŠ½Š½ŃŠ¼! | Do you find the posts helpful? "LIKE" these posts!
ŠŠ°Ń
Š¾Š“ŠøŃŠµ ŃŠ¾Š¾Š±ŃŠµŠ½ŠøŃ ŠæŠ¾Š»ŠµŠ·Š½ŃŠ¼Šø? ŠŠ¾ŃŃŠ°Š²ŃŃŠµ "ŠŠ ŠŠŠŠ¢Š”ŠÆ" ŃŃŠøŠ¼ ŃŠ¾Š¾Š±ŃŠµŠ½ŠøŃŠ¼!
ŠŠ° Š²Š°ŃŠµ Š·Š°ŠæŠøŃŠ°Š½Š½Ń Š²ŃŠ“ŠæŠ¾Š²ŃŠ»Šø? ŠŠ°ŃŠøŃŠ½ŃŃŃ ŠŗŠ½Š¾ŠæŠŗŃ "ŠŠ ŠŠŠŠÆŠ¢Š Š ŠŠØŠŠŠŠÆ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
ŠŠ° Š²Š°Ń Š²Š¾ŠæŃŠ¾Ń ŃŃŠæŠµŃŠ½Š¾ Š¾ŃŠ²ŠµŃŠøŠ»Šø? ŠŠ°Š¶Š¼ŠøŃŠµ ŠŗŠ½Š¾ŠæŠŗŃ "Š£Š¢ŠŠŠ ŠŠŠ¢Š¬ Š ŠŠØŠŠŠŠ"
Alexander Rivilis / ŠŠ»ŠµŠŗŃŠ°Š½Š“Ń Š ŠøŠ²ŠøŠ»ŠøŃ / ŠŠ»ŠµŠŗŃŠ°Š½Š“Ń Š ŃŠ²ŃŠ»ŃŃ
Programmer & Teacher & Helper / ŠŃŠ¾Š³ŃŠ°Š¼Š¼ŠøŃŃ - Š£ŃŠøŃŠµŠ»Ń - ŠŠ¾Š¼Š¾ŃŠ½ŠøŠŗ / ŠŃŠ¾Š³ŃŠ°Š¼ŃŃŃ - Š²ŃŠøŃŠµŠ»Ń - ŠæŠ¾Š¼ŃŃŠ½ŠøŠŗ
Facebook | Twitter | LinkedIn
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), _ OpenMode.ForRead) ' 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.CopyFrom(acLayout) acPlSet.PlotSettingsName = "MyPageSetup" acPlSet.AddToPlotSettingsDictionary(acCurDb) acTrans.AddNewlyCreatedDBObject(acPlSet, True) Else acPlSet = plSets.GetAt("MyPageSetup").GetObject(OpenMode.ForWrite) End If ' Update the PlotSettings object Try Dim acPlSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current ' Set the Plotter and page size acPlSetVdr.SetPlotConfigurationName(acPlSet, _ "DWF6 ePlot.pc3", _ "ANSI_B_(17.00_x_11.00_Inches)") ' Set to plot to the current display If acLayout.ModelType = False Then acPlSetVdr.SetPlotType(acPlSet, _ DatabaseServices.PlotType.Layout) Else acPlSetVdr.SetPlotType(acPlSet, _ DatabaseServices.PlotType.Extents) 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) acPlSetVdr.RefreshLists(acPlSet) ' 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") Else acPlSetVdr.SetCurrentStyleSheet(acPlSet, "acad.stb") End If ' Zoom to show the whole paper acPlSetVdr.SetZoomToPaperOnUpdate(acPlSet, True) Catch es As Autodesk.AutoCAD.Runtime.Exception MsgBox(es.Message) End Try ' Save the changes made acTrans.Commit() If createNew = True Then acPlSet.Dispose() End If End Using End Sub