MapScale not being persisted properly in mxd when programmatically changed outside of ArcMap environ
- by Vidar
I am trying to change the scale of a map in an mxd OUTSIDE of ArcMap in a standalone Windows application. The problem is the scale is never persisted - the best code I have come up with is the following:
private void UpdateMapScaleInMxd(double scale, string mxdFullPath)
{
IMapDocument mapDocument = new MapDocumentClass();
mapDocument.Open(mxdFullPath, "");
IPageLayout pageLayout = (IPageLayout)mapDocument.ActiveView;
IGraphicsContainer graphicsContainer = (IGraphicsContainer)pageLayout;
graphicsContainer.Reset();
IMapFrame mapFrame;
IActiveView tmpActiveView = null;
IElement element = graphicsContainer.Next();
while (element != null)
{
if (element is IMapFrame)
{
mapFrame = (IMapFrame)element;
tmpActiveView = (IActiveView)mapFrame.Map;
mapFrame.ExtentType = esriExtentTypeEnum.esriExtentScale;
mapFrame.MapScale = scale;
tmpActiveView.Refresh();
}
element = graphicsContainer.Next();
}
mapDocument.Save(false, false);
mapDocument.Close();
}
I check the mxd by opening it up in ArcMap and the map scale has changed, although the little combobox to change the scale is now greyed out - does anyone know what that means!?
So now I try to export the map as a PDF in code - and the most frustrating thing is - it exports the map at the previous scale that was set - NOT the scale I just changed it to! So infuriating - if anyone can help me understand where I am going wrong that would be great.