Mais

Excluindo camadas de encaixe usando IPointSnapper

Excluindo camadas de encaixe usando IPointSnapper


Estou trabalhando com ArcObjects em C # e estou tentando excluir todas as camadas de mapa, exceto uma (a única que desejo ajustar) do ambiente de ajuste. Estou usando as interfaces ISnappingEnvironment e IPointSnapper. Coloquei o seguinte código no método OnClick da ferramenta que estou usando:

m_Snapper = m_SnappingEnvironment.PointSnapper; ISet anExclLyrSet = new SetClass (); m_Snapper.ExcludedLayers (ref anExclLyrSet); //… percorre todas as camadas do mapa, adicionando todas, exceto aquela de interesse a anExclLyrSet m_Snapper.ClearCache ();

Basicamente, estou obtendo baixo desempenho de encaixe devido à presença de uma camada de mapa base que contém várias camadas de feições. Se eu desligar essa camada (torná-la invisível), o desempenho é bom.

Confirmei que todas as camadas (para camadas de tipo composto, adiciono cada subcamada à exclusão também) estão sendo adicionadas ao conjunto de exclusão, mas não consigo melhorar o desempenho sem desligar isso camada de mapa base. Não tenho certeza do que estou fazendo de errado - o cache precisa ser limpo após cada camada individual ser excluída? Eu gostaria de saber os insights que alguém possa ter sobre isso. Obrigado!

Mark C.


Aqui está a solução que escolhemos para este problema. É chamado quando o ambiente de ajuste é configurado.

///  /// Constrói (adiciona camadas) ao conjunto de exclusão para IPointSnapper. Configure para excluir todas as camadas /// exceto aquela com o nome fornecido. ///  ///  Referência ao mapa.  ///  Referência ao conjunto de exclusão de camada para IPointSnapper.  ///  Nome de uma camada que NÃO deve ser excluída.  ///  Referência ao PointSnapper.  public static void BuildSnappingExclusionSet (IMap aMap, ref ISet anExclLyrSet, string aStr, IPointSnapper pSnapper) {ILayer aLyr = null; ICompositeLayer aCompLyr = null; IBasemapLayer aBmapLyr = null; IBasemapSubLayer aBmapSubLyr = null; para (int i = 0; i