sexta-feira, setembro 07, 2007

Criar Bookmarks [ArcEngine]

Olá,

Gostaria de repassar o conhecimento de como criar Bookmarks em um menu em uma aplicação ArcEngine.

Segue primeiramente o código para adicionar itens no menu dinamicamente. Cria-se algumas variáveis membro na sua classe que contenha o menu.

IList tsItem2 = new List();
DlgFavoritos dlgFavoritos;
int index = 0;

Depois criamos o menu com um ítem Adicionar Favoritos...



Após isso no evento click() do menu adicione o seguinte código

private void adicionarFavoritoToolStripMenuItem_Click(object sender, EventArgs e)
{
string nomeFavorito;

try
{
if (dlgFavoritos == null)
{
dlgFavoritos = new DlgFavoritos();
dlgFavoritos.ShowDialog();
}
else
{
dlgFavoritos.ShowDialog();
}
}
finally
{
nomeFavorito = dlgFavoritos.txtBoxFavorito.Text;
if (( dlgFavoritos.BookmarkSolicitado ) && ( !existeNoMenu(nomeFavorito, menuStripPrincipal) ))
{
tsItem2.Add(new ToolStripMenuItem());
tsItem2[index].Name = nomeFavorito;
tsItem2[index].Text = nomeFavorito;
( (ToolStripMenuItem)menuStripPrincipal.Items[menuStripPrincipal.Items.Count - 2] ).DropDownItems.AddRange(new ToolStripItem[] { tsItem2[index] });
tsItem2[index].Click += new System.EventHandler(this.ZoomTo);
AddSpatialBookMark(axMapControlPrincipal.ActiveView, tsItem2[index].Name);
index++;
dlgFavoritos.BookmarkSolicitado = false;
MessageBox.Show("Favorito: " + nomeFavorito + " criado com sucesso.", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (existeNoMenu(nomeFavorito,menuStripPrincipal) )
{
MessageBox.Show("Esta entrada no menu já existe favor tentar outro nome", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}



este código adicionará item a item no menu associando o mesmo evento para todos os ítens.

Agora é só criar o método que adiciona o bookmark ao seu mapa e boa sorte.

Segue o método que faz a criação de bookmaarks

private void ZoomTo(object sender, EventArgs e)
{
irParaBookmark(axMapControl1.ActiveView, ( (ToolStripItem)sender ).Name);
}

public static void irParaBookmark(IActiveView activeView, String nomeBookMark)
{
for (int i = 0; i <>
{
if (aoiBookmark[i].Name == nomeBookMark)
{
aoiBookmark[i].ZoomTo(activeView.FocusMap);
activeView.Refresh();
}
}
}

#region variaveis bookmark
public static IList aoiBookmark = new List();
public static IMapBookmarks mapBookmarks;
public static int index = 0;
#endregion

public static void AddSpatialBookMark(IActiveView activeView, String bookmarkName)
{
if (activeView == null || bookmarkName == null)
{
return;
}
// Criar um novo bookmark e setar sua localização na extensão corrente do mapa atual
aoiBookmark.Add(new AOIBookmarkClass());

// Setar Bookmark para a extensão correte
aoiBookmark[index].Location = activeView.Extent;
aoiBookmark[index].Name = bookmarkName;

// Adiciona o bookmark à coleção de bookmark do mapa
// Para o ArcGIS Desktop isto irá adicionar o bookmark ao menu Bookmarks da visão
mapBookmarks = (IMapBookmarks)activeView; // Dynamic Cast
mapBookmarks.AddBookmark(aoiBookmark[index]);
index++;

}

Espero que lhes sejam útil pois é uma funcionalidade que melhora a produtividade de quem passa o dia trabalhando com mapas.

A Esri já possui sua própria ferramenta mas preferí customizá-la.


Ezequias.