4 votos

arcobjects actualiza los valores Z de la geometría de los vértices de las líneas con un número determinado

Estoy tratando de desarrollar el addin de arcgis 10.0 para actualizar los valores Z de los vértices de una línea seleccionada. Escenario: La herramienta escanea todas las características en un archivo de forma dado y rellena la lista de características que tiene al menos un vértice con un vlaue Z = 0. El usuario entonces selecciona una característica de la lista y hace clic en un botón para actualizar los valores Z a una altura dada - esta última parte no funciona.

He intentado lo siguiente para actualizar los valores Z de una característica de polilínea seleccionada sin suerte:

    Dim pFeatureSelection As IFeatureSelection
            pFeatureSelection = pFLayer
            Dim pEnumID As IEnumIDs
            pEnumID = pFeatureSelection.SelectionSet.IDs
            Dim id As Long
            id = pEnumID.Next
            Dim pPointCollection As IPointCollection
            Dim pFeature As IFeature
            Do While Not id = -1
                pFeature = pFLayer.FeatureClass.GetFeature(id)
                pPointCollection = pFeature.Shape

                For lPnt = 0 To (pPointCollection.PointCount - 1)
                     SetZValueOnPoint(pPointCollection.Point(lPnt), Convert.ToDouble(txtZValue.Text))

                Next

                id = pEnumID.Next
            Loop

3voto

meryloo Puntos 544

Gracias a la ayuda de Jeff obtuvimos la respuesta a través del Foro de discusión de ArcGIS :

Public Sub SetZValueOnPoint(ByVal point As ESRI.ArcGIS.Geometry.IPoint, ByVal zValue As System.Double)  

   If point Is Nothing OrElse point.IsEmpty Then  
       Return  
   End If  

   Dim zAware As ESRI.ArcGIS.Geometry.IZAware = CType(point, ESRI.ArcGIS.Geometry.IZAware) ' Explicit Cast  
    zAware.ZAware = True  
    point.Z = zValue  

End Sub

2voto

Flinkman Puntos 4821

Si el deseo es que la polilínea tenga el mismo valor Z desde el principio hasta el final, entonces utilice IZ interfaz. Esta interfaz tiene un método SetConstantZ ( Double ZLevel ) que funciona para polígonos y polilíneas que establecerán cada vértice con el mismo valor Z. Este enfoque es mucho más sencillo que el de GeometryCollection / PointCollection / IZaware que he utilizado anteriormente para establecer los valores Z individuales de los puntos (es decir, todos diferentes).

0voto

kakaz Puntos 31

Si se utilizó IPolyLine. sólo tiene que establecer zAware a true para resolver este problema.

 Dim newSegCollection As ISegmentCollection = New Polyline
 Dim zAware As IZAware = CType(newSegCollection, IZAware)
 zAware.ZAware = True

entonces puede establecer z para FromPoint y ToPoint para cada línea en su forma IPolyLine.

y si quieres establecer la misma z para todas las líneas en IPolyLine puedes usar la interfaz IZ y SetConstantZ.

Dim iz As IZ2 = newSegCollection
iz.SetConstantZ(12.12)

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