Acceso a los fenómenos de una fuente de datos tabular

Para acceder a los fenómenos de una fuente de datos tabular se utiliza el método features. Este método devuelve un objeto que nos permite iterar sobre el conjunto de datos de la capa. Sin embargo, hay que tener en cuenta que el iterador reutiliza la instancia para el nuevo valor, por lo que durante una iteración no debemos guardarnos el valor de la instancia, si no obtener una copia de esta mediante el método getCopy del fenómeno. El motivo para reutilizar la instancia es que esta técnica aumenta la velocidad de ejecución y crea muchas menos instancias de objetos, lo que mejora el rendimiento de la máquina virtual de java.

La colección de fenómenos. La clase FeatureSet

El código para obtener los fenómenos de la capa activa sería
    layer = currentLayer() 
    features = layer.features()
Los métodos más importantes que tiene el objeto featureSet son

Veamos cómo recorrer los fenómenos de una capa con un ejemplo. Supongamos que tenemos una capa activa cuyos fenómenos tienen una propiedad ELEVACION, nosotros queremos obtener el objeto feature que se corresponde con el valor máximo de este atributo.
Los pasos que se siguen en el ejemplo son (ejemplo 1):
    layer = currentLayer()
    features = layer.features()
    fmax = 0.0
    newFeature = None
    for feature in features:
    	if feature.ELEVACION > fmax:
    	newFeature = feature.getCopy()
   	#
    	# resto de codigo
Recuerda que debes realizar una copia de la feature y no una asiganción  directa.

Manejo de la selección, la clase Selection

Podemos obtener un subconjunto concreto de fenómenos de una capa o tabla aplicando un filtro sobre los atributos de los fenómenos. Para ello tenemos que invocar al método 'features' de la capa usando la condición que queremos que se aplique al conjunto de los datos para obtener nuestro subconjunto.
Por ejemplo, el código de aplicar un filtro a nuestro conjunto de datos podría ser (ejemplo 2):
    layer = currentLayer()
    expresion = "ID >= 50 AND ID < 100"
    features = layer.features(expresion)
    #
    # resto de codigo
También puede darse la circunstancia de que queramos operar con un conjunto de datos que ya tenemos seleccionados en la capa. En este caso deberemos usar el método getSelection de la capa (ejemplo 3).
    layer = currentLayer()
    features = layer.getSelection()
    #
    #resto de codigo
Es posible, también, que queramos recorrer los fenómenos e ir añadiendo algunos a la selección, para ello, lo primero que debemos hacer es obtener el objeto 'selection' y añadir los fenómenos que queramos mediante el método 'select' (ejemplo 4).
    layer = currentLayer()
    features = layer.features()
    for feature in features:
      featureCopy = feature.getCopy()
      layer.getSelection().select(featureCopy)
      #
      # resto de codigo
Este ejemplo anterior, haría una selección de todos los fenómenos de la capa, lo que es equivalente al método 'selectAll' (ejemplo 5).
    layer = currentLayer()
    features = layer.getSelection().selectAll()
Si queremos seleccionar los fenómenos que cumplan una determinada condición podemos hacerlo de la siguiente manera. Este ejemplo añade a la selección el fenómeno que tiene el valor más alto en el campo ELEVATION (ejemplo 6).
    layer = currentLayer()
    features = layer.features()
    fmax =0
    featureCopy = None
    for feature in features:
      if feature.ELEVACION > fmax:
        featureCopy = feature.getCopy()
    if featureCopy:
      layer.getSelection().select(featureCopy)
    #
    # resto de codigo

El objeto Feature

Representa un fenómeno de una fuente de datos tabular. Sus métodos principales son:

Modificación de los atributos de un fenómeno

Los fenómenos no son editables en sí mismos. Para editar un fenómeno es necesario invocar al método edit(), a continuación se realizan los cambios que se quieran aplicar sobre el fenómeno.
Internamente la edición de una feature se realiza mediante una copia de esta  para evitar que se produzcan ambigüedades en el estado interno del fenómeno.
El código para modificar un atributo del fenómeno sería (ejemplo 7)
    fuente = currentTable()
    features = fuente.features()
    for feature in features:
      feature.edit()
      feature.set("NombreDelAtributo", valor)
      fuente.update(feature)
    fuente.commit()
El código para modificar una capa es el mismo llamando a la función  currentLayer.

Añadir un registro a la fuente de datos

Para añadir un registro o fenómeno nuevo a la fuente de datos tabular debe usarse el método append de la instancia de la fuente de datos.
    table = currentTable()
    table.append(values)
    table.update()
    table.commit()
Si el objeto no está en estado de edición al usar este método se cambiará el estado a modo edición.
Por ejemplo, supongamos que tenemos un dxf sin registros con un campo "Id", de tipo entero y queremos añadir 10 registros nuevos cuyo id se incremente en una unidad (ejemplo 8).
    table = currentTable()
    values = dict()
    for i in range(1,11):
      values["Id"] = i
      table.append(values)
    table.commit()