Primera incursión en la simbología desde scripting en gvSIG 2.0

Hola a todos.

El otro día un compañero escribió en la lista de usuarios de gvSIG sobre un proyecto que estaba abordando en gvSIG y precisaba acceder desde scripting a la simbología de una capa.

En principio no se ha preparado nada en el API de scripting para acceder a la parte de simbología… bueno, creo que se añadieron un par de funciones para algo muy, muy, muy básico.

La cuestión es que precisaba exportar la configuración de la simbología que tenía aplicada a una serie de capas y me preguntó cómo podría hacerlo.

Como la respuesta no era “corta” y podría servir para más usuarios de gvSIG he pensado dejarlo caer aquí, en el blog de gvSIG, antes que únicamente en la lista de usuarios.

Bueno, al grano…

Acceder a la configuración de la leyenda de una capa es relativamente simple. basta con:

layer = currentLayer()
legend = layer.getLegend()

Y esto nos devolverá un objeto leyenda de gvSIG.

El problema es que en gvSIG las leyendas son registrables. Es decir, no existe una “Leyenda”, sino que los distintos plugins de gvSIG puede registrar varias leyendas. Esto hace que a priori sea bastante complicado saber a qué operaciones va a responder la leyenda que obtenemos con la invocación al getLegend().

Voy a centrarme con los tipos básicos de leyenda que van con gvSIG 2.0 (en gvSIG 2.1 se incluyen más tipos de leyenda, pero si es necesario ya hablaremos en otro momento de ellos).

Una clasificación podría ser:

  • Leyendas vectoriales (IVectorLegend)
  • Leyendas raster (IRaterLegend)

Pero de momento solo voy a hablar de las leyendas vectoriales.

Otra clasificación podría ser:

Cada tipo de leyenda ofrece una serie operaciones, así que lo primero que deberemos hacer es determinar con qué leyenda estamos trabajando. Para ello dejo aquí unas pequeñitas funcioncitas. Son muy simples, pero lo mejor es que si las necesitamos, y mientras no estén en la librería de scripting, que nos limitemos a pegar el bloque entero en nuestro script.

#==========================================================
#
# Funciones para manejo de los tipos basicos de leyendas
#
from org.gvsig.fmap.mapcontext.rendering.legend import ISingleSymbolLegend
from org.gvsig.fmap.mapcontext.rendering.legend import IClassifiedLegend
from org.gvsig.fmap.mapcontext.rendering.legend import IVectorialIntervalLegend
from org.gvsig.fmap.mapcontext.rendering.legend import IVectorialUniqueValueLegend
from org.gvsig.fmap.mapcontext.rendering.legend import IClassifiedVectorLegend

def getLegendName(legend):
  return legend.getClass().getSimpleName()

def isSingleSymbolLegend(legend):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/legend/ISingleSymbolLegend.html
  return isinstance(legend,ISingleSymbolLegend)

def isVectorialIntervalLegend(legend):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialIntervalLegend.html
  return isinstance(legend,IVectorialIntervalLegend)

def isVectorialUniqueValueLegend(legend):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialUniqueValueLegend.html
  return isinstance(legend,IVectorialUniqueValueLegend)

def isClassifiedLegend(legend):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedLegend.html
  return isinstance(legend,IClassifiedLegend)

def isClassifiedVectorLegend(legend):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedVectorLegend.html
  return isinstance(legend,IClassifiedVectorLegend)

No hace falta que se entienda mucho el código, nos bastará con saber que una vez incluido en nuestro script podremos saber si nuestra leyenda es de un tipo dado con algo como:

layer = currentLayer()
legend = layer.getLegend()
if isVectorialUniqueValueLegend(legend):
  print "La capa tiene una leyenda de valores unicos"

A falta de API y documentación en scripting para los tipos de leyenda, podemos ir a IVectorialUniqueValueLegend para consultar las operaciones o métodos que podemos usar. Bueno, con esta información accedemos al objeto leyenda de nuestra capa… pero… ¿y ahora qué?

En general, una leyenda contiene una definición de símbolos y una forma de consultar cómo obtener un símbolo dado para aplicarlo a una feature o linea de la tabla de datos asociada a la capa.

Por ejemplo, la leyenda de símbolo único (ISimgleSimbolLegend) tiene un método getDefaultSymbol() que nos devolverá el símbolo a aplicar a todas las features de nuestra capa, mientras que una leyenda vectorial clasificada tendrá un método getSymbols() que nos devolverá la lista de símbolos de esa leyenda. El problema con el que nos vamos a encontrar inmediatamente es que hay muchos tipos de símbolos, al igual que pasaba con las leyendas, y cada cual con sus operaciones o métodos. Así podemos encontrarnos:

A pesar de que hay distintos tipos de símbolos, todos responden a una serie de operaciones muy básicas como:

  • getDescription()
  • getColor()
  • getSymbolForSelection(), con este tened mucho cuidado que es muy fácil quedarse buclado.

Para el resto de operaciones, tendremos que averiguar de qué tipo de símbolo se trata, y al igual que he hecho con las leyendas, tendremos una serie de funciones para preguntar cuál es el tipo de símbolo que tenemos.

#==========================================================
#
# Funciones para manejo de los tipos básicos de símbolos
#
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill import ISimpleFillSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill import IMarkerFillSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill import IPictureFillSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line import ILineSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line import IPictureLineSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker import IMarkerSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker import IPictureMarkerSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker import ISimpleMarkerSymbol
from org.gvsig.fmap.mapcontext.rendering.symbols import ITextSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text import ISimpleTextSymbol

def getSymbolName(symbol):
  return symbol.getClass().getSimpleName()

def isFillSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IFillSymbol.html
  return isinstance(symbol,ISimpleFillSymbol)

def isMarkerFillSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IMarkerFillSymbol.html
  return isinstance(symbol,IMarkerFillSymbol)

def isPictureFillSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IPictureFillSymbol.html
  return isinstance(symbol,IPictureFillSymbol)

def isLineSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/ILineSymbol.html
  return isinstance(symbol,ILineSymbol)

def isPictureLineSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/IPictureLineSymbol.html
  return isinstance(symbol,IPictureLineSymbol)

def isMarkerSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IMarkerSymbol.html
  return isinstance(symbol,IMarkerSymbol)

def isPictureMarkerSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IPictureMarkerSymbol.html
  return isinstance(symbol,IPictureMarkerSymbol)

def isSimpleMarkerSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/ISimpleMarkerSymbol.html
  return isinstance(symbol,ISimpleMarkerSymbol)

def isTextSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/symbols/ITextSymbol.html
  return isinstance(symbol,ITextSymbol)

def isSimpleTextSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/text/ISimpleTextSymbol.html
  return isinstance(symbol,ISimpleTextSymbol)

Entonces podremos hacer cosas como:

layer = currentLayer()
legend = layer.getLegend()
if isSingleSymbolLegend(legend):
  symbol = getDefaultSymbol()
  if isFillSymbol(symbol):
    print symbol.getFillColor()

Con esto mas o menos ya podemos empezar a investigar sobre qué nos ofrece una leyenda, pero una de las preguntas que nos haremos llegados hasta aquí es ¿Y cómo sé qué símbolo se aplica a cada geometría?

La pregunta tiene una respuesta fácil y otra compleja. Nos vamos a quedar con la fácil. A la leyenda podemos preguntarle qué símbolo aplica dada una feature, getSymbolByFeature(). Por ejemplo, podríamos hacer algo como:

layer = currentLayer()
legend = layer.getLegend()
print 
print "Símbolos de cada feature:"
for feature in layer.features():
  # La siguiente linea, es un hack para acceder al objeto feature de java
  # en gvSIG 2.1 probablemente no hará falta.
  feature = feature() 

  symbol = legend.getSymbolByFeature(feature)
  ...

Aquí lo que hacemos es recorrernos las features de la capa, y para cada feature, le preguntamos a la leyenda cuál seria el símbolo que aplica a esa feature.

Bueno, no me voy a extender más, esto es solo el punto de partida para que a quien le interese pueda empezar a hacer pruebas, y si tiene dudas, puede preguntar por la lista de usuarios de gvSIG.

Dejo aquí un script “completo”, jejeje, donde esta todo esto junto. El script coge la capa activa e intenta hacer un volcado por la consola de los datos de la simbología de la capa.

Lo de “completo”, es por que no he sido exhaustivo en la verificación de los tipos de leyenda y símbolos, pero creo que es suficiente lo que hay para ir empezando.

Hasta la próxima.

from gvsig import *

def main():
  #
  # Para hacer las pruebas he cargado en una vista la capa:
  # http://downloads.gvsig.org/download/geodata/vector/SHP2D/provincias_andalucia.zip
  # La he puesto activa y le añadido una leyenda de valores únicos.
  #
  # El código pretende ser un punto de partida, y no está acabado.
  # No solo por que falten leyendas por tener en cuenta, si no porque
  # en muchos puntos he dejado un "#TODO" indicando que por ahí tenéis
  # que continuar vosotros. Sin embargo, creo que es un buen punto de partida
  # para alguien que quiera empezar a ver de manipular leyendas desde scripting.
  #
  # En las funciones isXXXX que hay más abajo he dejado la url a los javadocs de
  # la clase/interface correspondiente. En ellos podéis ver los métodos que tiene
  # cada clase.
  #
  layer = currentLayer()
  print layer.getName()
  #
  # La función dumpLegend está más abajo en este script.
  dumpLegend(layer.getLegend())

  # Bueno, con el código de arriba, podemos ver como acceder a la información de la 
  # leyenda, pero si queremos saber que símbolo se corresponde con que elemento de la capa
  # podemos hacer algo como:

  legend = layer.getLegend()
  print 
  print "Simbolos de cada feature:"
  for feature in layer.features():
    # La siguiente línea, es un hack para acceder al objeto feature de java
    # en gvSIG 2.1 probablemente no hará falta.
    feature = feature() 

    print feature.get(0), "(", feature.toString() ,")"
    dumpSymbol( legend.getSymbolByFeature(feature) )

#==========================================================
#
# Y aquí estaría el código para hacer un volcado en texto de la 
# leyenda y los símbolos. No es exhaustivo y seguramente se puede
# mejorar pero valdrá para ver por donde se puede consultar los
# valores de la leyenda y los símbolos.
#
def dumpLegend(legend):
  print getLegendName(legend)

  if isSingleSymbolLegend(legend) :
    # Esta leyenda tiene un único símbolo que se aplica a todas
    # las geometrias.
    dumpSymbol(legend.getDefaultSymbol())
    return 

  if isClassifiedVectorLegend(legend):
    print "- Campos de clasificacion: ", legend.getClassifyingFieldNames()

  if isClassifiedLegend(legend):
    # Si es una leyenda clasificada tendrá una lista de símbolos
    print "- Símbolos:"
    for symbol in legend.getSymbols():
      dumpSymbol(symbol)
      print 
    print "- Descripciones:", legend.getDescriptions()
    print "- Valores:", legend.getValues()

  # Ahora comprobamos si se trata de otros tipos de leyenda, que pueden
  # ser o no clasificadas.
  if isVectorialIntervalLegend(legend) :
    # TODO
    print "Falta por codificar la leyenda (",getLegendName(legend),")"

  elif isVectorialUniqueValueLegend(legend) :
    # Es una leyenda clasificada (ClassifiedLegend) con algunos
    # valores más. 
    print "- colorScheme: ", legend.getColorScheme()

  else:
    print "No se qué hacer con esta leyenda"

def dumpSymbol(symbol, indentacion=1, selection=False):
  spaces=("  "*indentacion)
  print spaces,"- name: ", getSymbolName(symbol)
  #
  # Atributos que podemos encontrar en todos los símbolos
  print spaces,"- description: ", symbol.getDescription()
  print spaces,"- color: ", symbol.getColor()
  print spaces,"- symbolForSelection: ", symbol.getSymbolForSelection()
  if not symbol.getSymbolForSelection() is None and not selection: 
    # Llamamos a dumpSymbol poniendo selección a true para evitar que se 
    # quede bucleado.

    # Lo comento de momento para evitar una salida tan larga en las pruebas
    #dumpSymbol(symbol.getSymbolForSelection(),indentacion+1, selection=True)
    pass
  #
  # El resto de atributos dependen del tipo de símbolo
  # Cuidado, no hay "else"s ya que pueden haber símbolos que
  # sean de varios tipos a la vez.
  #
  if isFillSymbol(symbol):
    print spaces,"- hasFill: ", symbol.hasFill()
    print spaces,"- hasOutline: ", symbol.hasOutline()
    print spaces,"- fillAlpha: ", symbol.getFillAlpha()
    print spaces,"- fillColor: ", symbol.getFillColor()
    print spaces,"- outline: ", symbol.getOutline()
    if not symbol.getOutline() is None : 
      # Lo comento de momento para evitar una salida tan larga en las pruebas
      #dumpSymbol(symbol.getOutline(),indentacion+1, selection)
      pass

  if isMarkerFillSymbol(symbol):
    # TODO
    print spaces, "Falta por codificar el volcado del simbolo (", getSymbolName(symbol),")"

  if isPictureFillSymbol(symbol):
    # TODO
    print spaces, "Falta por codificar el volcado del simbolo (", getSymbolName(symbol),")"

  if isLineSymbol(symbol):
    # TODO
    print spaces, "Falta por codificar el volcado del simbolo (", getSymbolName(symbol),")"

  if isPictureLineSymbol(symbol):
    # TODO
    print spaces, "Falta por codificar el volcado del simbolo (", getSymbolName(symbol),")"

  if isMarkerSymbol(symbol):
    # TODO
    print spaces, "Falta por codificar el volcado del simbolo (", getSymbolName(symbol),")"

  if isPictureMarkerSymbol(symbol):
    # TODO
    print spaces, "Falta por codificar el volcado del simbolo (", getSymbolName(symbol),")"

  if isSimpleMarkerSymbol(symbol):
    # TODO
    print spaces, "Falta por codificar el volcado del simbolo (", getSymbolName(symbol),")"

  if isTextSymbol(symbol):
    # TODO
    print spaces, "Falta por codificar el volcado del simbolo (", getSymbolName(symbol),")"

  if isSimpleTextSymbol(symbol):
    # TODO
    print spaces, "Falta por codificar el volcado del simbolo (", getSymbolName(symbol),")"

#==========================================================
#
# Funciones para manejo de los tipos básicos de leyendas
#
from org.gvsig.fmap.mapcontext.rendering.legend import ISingleSymbolLegend
from org.gvsig.fmap.mapcontext.rendering.legend import IClassifiedLegend
from org.gvsig.fmap.mapcontext.rendering.legend import IVectorialIntervalLegend
from org.gvsig.fmap.mapcontext.rendering.legend import IVectorialUniqueValueLegend
from org.gvsig.fmap.mapcontext.rendering.legend import IClassifiedVectorLegend

def getLegendName(legend):
  return legend.getClass().getSimpleName()

def isSingleSymbolLegend(legend):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/legend/ISingleSymbolLegend.html
  return isinstance(legend,ISingleSymbolLegend)

def isVectorialIntervalLegend(legend):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialIntervalLegend.html
  return isinstance(legend,IVectorialIntervalLegend)

def isVectorialUniqueValueLegend(legend):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/legend/IVectorialUniqueValueLegend.html
  return isinstance(legend,IVectorialUniqueValueLegend)

def isClassifiedLegend(legend):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedLegend.html
  return isinstance(legend,IClassifiedLegend)

def isClassifiedVectorLegend(legend):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/legend/IClassifiedVectorLegend.html
  return isinstance(legend,IClassifiedVectorLegend)

#==========================================================
#
# Funciones para manejo de los tipos básicos de símbolos
#
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill import ISimpleFillSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill import IMarkerFillSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill import IPictureFillSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line import ILineSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line import IPictureLineSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker import IMarkerSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker import IPictureMarkerSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker import ISimpleMarkerSymbol
from org.gvsig.fmap.mapcontext.rendering.symbols import ITextSymbol
from org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text import ISimpleTextSymbol

def getSymbolName(symbol):
  return symbol.getClass().getSimpleName()

def isFillSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IFillSymbol.html
  return isinstance(symbol,ISimpleFillSymbol)

def isMarkerFillSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IMarkerFillSymbol.html
  return isinstance(symbol,IMarkerFillSymbol)

def isPictureFillSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/fill/IPictureFillSymbol.html
  return isinstance(symbol,IPictureFillSymbol)

def isLineSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/ILineSymbol.html
  return isinstance(symbol,ILineSymbol)

def isPictureLineSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/line/IPictureLineSymbol.html
  return isinstance(symbol,IPictureLineSymbol)

def isMarkerSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IMarkerSymbol.html
  return isinstance(symbol,IMarkerSymbol)

def isPictureMarkerSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/IPictureMarkerSymbol.html
  return isinstance(symbol,IPictureMarkerSymbol)

def isSimpleMarkerSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/marker/ISimpleMarkerSymbol.html
  return isinstance(symbol,ISimpleMarkerSymbol)

def isTextSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.fmap.mapcontext.api/2.0.18/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/apidocs/org/gvsig/fmap/mapcontext/rendering/symbols/ITextSymbol.html
  return isinstance(symbol,ITextSymbol)

def isSimpleTextSymbol(symbol):
  # https://devel.gvsig.org/sites/org.gvsig.symbology.lib.api/2.0.18/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.api/apidocs/org/gvsig/symbology/fmap/mapcontext/rendering/symbol/text/ISimpleTextSymbol.html
  return isinstance(symbol,ISimpleTextSymbol)

About Joaquin del Cerro

Development and software arquitecture manager at gvSIG Team. gvSIG Association
This entry was posted in gvSIG Desktop, scripting, spanish. Bookmark the permalink.

One Response to Primera incursión en la simbología desde scripting en gvSIG 2.0

  1. Pingback: Recopilación de información sobre el módulo de Scripting | masquesig

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s