2 votos

Creación de un conjunto de selección a partir de características seleccionadas mediante la selección por ubicación

Estoy tratando de convertir mi código VBA a vb.net. Utilizo "Seleccionar por ubicación" para seleccionar todos los puntos que intersectan líneas. Luego quiero hacer clic en un botón para poner los puntos en un conjunto de selección. Luego puedo usar otros dos botones para recorrer el conjunto de selección.

Cuando intento convertir mi código sigo obteniendo el siguiente error en vb.net.:

En vb sigo obteniendo un error para 'pFeatureCursor' que dice "La variable 'pFeatureCursor' se pasa por referencia antes de que se le haya asignado un valor. Podría producirse una excepción de referencia nula en tiempo de ejecución.

Aquí está el código VBA:

Public Sub GetSelSet()
  Dim pMxDoc As IMxDocument
  Dim pMap As IMap
  Dim pActiveView As IActiveView
  Dim pFeatureLayer As IFeatureLayer
  Dim pFeatureSelection As IFeatureSelection
  Dim pSelectionSet As ISelectionSet
  Dim pFeatureCursor As IFeatureCursor
  Dim pCurFeat As IFeature
  Dim intLayer As Integer

  Set pMxDoc = Application.Document
  Set pMap = pMxDoc.FocusMap
  Set pActiveView = pMap
  Set pSelSet = New esriSystem.Set
  CurrentIndex = 0

  For intLayer = 0 To pMap.LayerCount - 1
    If TypeOf pMap.Layer(intLayer) Is IFeatureLayer Then
      Set pFeatureLayer = pMap.Layer(intLayer)
      If Not pFeatureLayer.FeatureClass Is Nothing Then
        If pFeatureLayer.FeatureClass.featureCount(Nothing) > 0 Then
          Set pFeatureSelection = pFeatureLayer
          Set pSelectionSet = pFeatureSelection.SelectionSet
          pSelectionSet.Search Nothing, False, pFeatureCursor
          Set pCurFeat = pFeatureCursor.NextFeature

          Do While Not pCurFeat Is Nothing
            pSelSet.Add pCurFeat
            Set pCurFeat = pFeatureCursor.NextFeature
          Loop

        End If
      End If
    End If

  Next intLayer

End Sub

0 votos

Dices que el error se produce en tu código VB .Net pero has subido tu código VBA que supongo que es el código que estás tratando de convertir, ¿podrías mostrar el código que realmente está causando el mensaje de error?

1 votos

Además, ¿se trata realmente de un error y no de una ADVERTENCIA dada por visual studio?

0voto

Flinkman Puntos 4821

Esto es sólo una advertencia y no un error, el compilador está haciendo consciente de que hay una trampa que podría golpear .. sin embargo usted tiene bastantes líneas de código para enumerar la selección de características de IMap.Layers que no atravesará las capas del grupo - Si una capa no es válida (signo de exclamación rojo que indica que los datos no se encuentran), el código se bloqueará y se quemará.

En lugar de recorrer ese pedregoso camino IMap implementa FeatureSelection que ignora las capas no válidas y encuentra la selección en las capas de grupo (este es un código VB.net, tendrá que añadir la palabra clave SET al asignar los objetos):

Dim pCnt As Long
Dim pSelection As IEnumFeature
Dim pSelSet As ISelectionSet
pSelSet = New esriSystem.Set

pMap = pDoc.FocusMap 'pMap is of type IMap and pDoc is IMxDocument
If pMap.SelectionCount = 0 Then Exit Sub

' pMap.FeatureSelection is of type ISelection wich is implemented by EnumFeature
pSelection = CType(pMap.FeatureSelection, IEnumFeature)
pMaxFeat = pMap.SelectionCount

For pCnt = 0 To pMaxFeat - 1
    pSelSet.Add pSelection.Next
Next

Le llevará al mismo objetivo en menos líneas con una capa de seguridad añadida; tenga en cuenta que en el conjunto de selección las características derivarán de diferentes clases de características, utilice IFeature.Class como IFeatureClass para localizar la fuente de cada característica. Este código puede convertirse fácilmente para utilizar IEditor.EditSelection para encontrar todas las características seleccionadas y editable implementado como IEnumFeature.

Espero que eso ayude.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X