Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tameirão

ESRI - ArcObjects

Recommended Posts

Galera,estou postando aqui a conversa em PM que tive com o Ceth. Assim, caso alguem tenha uma mesma duvida ou se alguem puder colaborar, fica melhor.

E ai!?Bom, infelizmente nao estou com muito tempo aqui, mas vou te passar uma funcao que coloca em um listbox o nome das layers. Vamos lá:

Dim pMxDoc As IMxDocument	Set pMxDoc = pIApplication.Document	Dim pLayerArray As IArray  	Dim pUID As New UID	pUID.Value = "{E156D7E5-22AF-11D3-9F99-00C04F6BC78E}"  'IGeoFeatureLayer IID	Dim pEnumLayer As IEnumLayer	Set pEnumLayer = pMxDoc.FocusMap.Layers(pUID, True)	pEnumLayer.Reset			'Declaracao de variáveis do arcObjects	Dim pFeatureLayer As IFeatureLayer	Dim pFeatureSelection As IFeatureSelection	Dim pFeatureCursor As IFeatureCursor	Dim pFeature As IFeature	Dim pPoint As IPoint		Set pFeatureLayer = pEnumLayer.Next		'Outras Declaracoes	Dim vIntFeatureCount As Integer	Dim vStrSugestaoArquivo As String	Dim vIntLayerCount As Integer	Dim i As Integer		'Aqui, deveremos criar um arquivo temporario para guardar todas as informacoes das features	'Nesse arquivo iremos guardar (separado por virgulas), o numero da layer, o nome da layer _	 e o nome do arquivo a ser salvo (de cada layer)	Dim vFileTemp As String	vFileTemp = ""			Do Until (pFeatureLayer Is Nothing)'Se a Layer estiver visivel na tela do usuario		If pFeatureLayer.Visible Then							'Adicionando no listBox o nome da layer			'lstLayersSelected.AddItem pFeatureLayer.Name				'Aponta para a proxima Layer		Set pFeatureLayer = pEnumLayer.Next				'Nao trava a aplicacao, liberando recursos para mouse, teclado e outras funcoes que mexem em relacao ao tempo		DoEvents	Loop '(pFeatureLayer Is Nothing)
Bom, é isso.Nao sei se vai te ajudar, mas é pq estou um pouco apertado aqui!Se nao funcionar, me fala o erro que deu.Quanto às declaracoes de variáveis, nao tive tempo de ver se são todas que você precisa, mas se nao for, tire elas.Esse código, retorna apenas as layers selecionadas pelo usuário. Se quiser todas, retire o if:
If pFeatureLayer.Visible Then
Vlw
Cara, estava analisando o código agora, então, eu não posso usar esse esquema, porque ele trabalha com os números das layers, eu só queria uma condição, no estilo:olharse for layer.grouplayers entaonão mostresenaose for um layer.layer mostrareu precisaria que ele listasse todas as layers, e me retortasse somente as layers, e ignorasse as layer.group, mas não posso usar número porque isso é variável, o usuário pode adicionar novos layers, tirar alguns, e assim esses números vão variar.Obrigado.
Voce testou esse código!?O pUID eu peguei do forum da ESRI mesmo!
Testei, ele da erro nesse pUID, por isso lhe perguntei, porque imaginei que você tivesse pego ai, ai eu teria que ver aqui pra pegar tbém, provávelmente é um outro, e não achei lugar pra pegar o mesmo.
QUal plataforma você está usando!?VB6 ou o VB.NET!?Pq esse código que eu te mandei é do VB6. Se nao estiver rodando, você deve adicionar as bibliotecas referente às classes.As mais comuns que você deveria adicionar, são: ESRI ArcMAP Objetct, ArcmapUI object, carto, cartoui, system, systemui, framework, geodatabase, Geometry, display e displayui.Essa são as bibliontecas que eu usei nesse programa.Qual o erro que tá dando!?Vamos fazer o seguinte. Vou postar isso no forum, na parte de VB. Assim, se alguem tiver alguma duvida a respeito disso, ja esclarece de uma vez, ok!?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá certo, assim a "conversa" pode vir a ajudar alguém, sem falar que ficamos abertos a mais idéias ;)

 

Bom, então, estou usando VB 6 mesmo, e sim, eu tenho todas as libs, por isso achei estranho, mas por "milagre ou não" ele funcionou agora, pelo menos passou daquela parte do pUID, não mudei nada demais, estranho, mas agora empacou no Loop:

 

Compiler error:

loop without do

 

ps: meio off ao problema, alguém acha possível fazer a filtragem com o Showtips?!

 

 

[]s,

ceth

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vi meu codigo que eu te mandei ali, e notei que esqueci de fechar o IF.Faca isso e veja se vai dar certo.Quanto ao showtips... bom nao entendi sua pergunta.Filtrar as layers através do showtip!?Bom, nunca fiz isso..Não sei se é uma boa.OBS.: Pode ir se acostumando com essas coisas do ArcObject. Uma hora compila tudo certo, outra hora nao. É tudo meio louco mesmo! Mas depois que passei para o .NET parou de fazer isso. Por isso, acho que seja alguma coisa da plataforma visual studio mesmo!Abraco!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, então, if fechado, e mesmo assim continua dando erro no "Loop".

 

Bom, consegui isso, da uma olhada:

 

Private Sub CommandButton1_Click()Set pMxDoc = Application.DocumentSet pMap = pMxDoc.FocusMapSet pLayer = pMap.Layer(0)Dim pGroup As IGroupLayer'Set pGroup = pMap.Layer(0)If TypeOf pMap.Layer(1) Is IGroupLayer Then   MsgBox "É um group layer"   Else   MsgBox "Não é um group layer"End IfEnd Sub

Filtragem básica, no caso eu informo no próprio código a layer a ser escolhida para fazer a filtragem, vou ver se adapto isso ao programo que preciso implementar, mas por hora acho que da jeito!

 

 

[]s,

ceth

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é cara.Mas desse jeito, nao sei se tem como você listar a quantidade de layers.Mesmo você fazendo um loop usando o pMap.Layer(i), não adianta, pois você nao vai ter o numero máximo de layers para percorrer.E se tiver 7 layers, na oitava passada já vai dar pau no loop.Bom, mas se resolveu, entao tá beleza..Abraco!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas desse jeito, nao sei se tem como você listar a quantidade de layers.Mesmo você fazendo um loop usando o pMap.Layer(i), não adianta, pois você nao vai ter o numero máximo de layers para percorrer.E se tiver 7 layers, na oitava passada já vai dar pau no loop.Bom, mas se resolveu, entao tá beleza..Abraco!

Pois é, eu não sabia disso, mas já estava quebrando a cabeça denovo por aqui, acho que vou voltar pro seu código, ver oque consigo lá, mas continuo com o erro no "Loop" amigo ;\Obrigado pela força![]s,ceth

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, vou testar o codigo depois..Mas tenho certeza que é assim mesmo!De qualquer maneira, vou ver se encontro outros trechos de código para te passar!Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.