In a custom ArcMap command implemented in .NET C# I create a new data frame this way:
// mxDocument is IMxDocument
IMap newMap = mxDocument.Maps.Create(); // create new data frame
newMap.Name = "I can name it as I want: " + Guid.NewGuid();
mxDocument.Maps.Add(newMap);
mxDocument.ActiveView = (IActiveView)newMap; // activate new data frame
mxDocument.UpdateContents();
However, compared to the data frame created with standard ArcMap means, there is something wrong with my data frame:
- ArcMap doesn't show property page for the data frame (right click - Properties)
- It's not possible to remove my data frame from ArcMap (right click - Remove)
Do I have to add some initialization code for IMap created with IMaps.Create (IMaps2.Create)?
The help for the method is quite laconic: "Creates a new map"...
I use ArcGIS version 10.2.2.
Answer
This code snippet should add a new dataframe:
IApplication app = default(IApplication);
IMxDocument pMxDoc = default(IMxDocument);
app = (IApplication)Hook;
pMxDoc = (IMxDocument)My.ArcMap.Application.Document;
//Create a new map
IMap pMap = default(IMap);
pMap = new Map();
pMap.Name = "My Map2";
//Create a new MapFrame and associate map with it
IMapFrame pMapFrame = default(IMapFrame);
pMapFrame = new MapFrame();
pMapFrame.Map = pMap;
//Set the position of the new map frame
IElement pElement = default(IElement);
IEnvelope pEnv = default(IEnvelope);
pElement = pMapFrame;
pEnv = new Envelope();
pEnv.PutCoords(0, 0, 5, 5);
pElement.Geometry = pEnv;
//Add mapframe to the layout
IGraphicsContainer pGraphicsContainer = default(IGraphicsContainer);
pGraphicsContainer = pMxDoc.PageLayout;
pGraphicsContainer.AddElement(pMapFrame, 0);
//Make the newly added map the focus map
IActiveView pActiveView = default(IActiveView);
pActiveView = pMxDoc.ActiveView;
if (pActiveView is IPageLayout) {
pActiveView.FocusMap = pMap;
} else {
pMxDoc.ActiveView = pMap;
}
//Refresh ActiveView and TOC
pActiveView.Refresh();
pMxDoc.CurrentContentsView.Refresh(0);
Sourced from How to create a new map
No comments:
Post a Comment