Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.app / org.gvsig.scripting.app.mainplugin / src / main / resources-plugin / scripting / scripts / libs / toolbox.py @ 478

History | View | Annotate | Download (4.04 KB)

1
#
2
# ==========================================================
3
#
4
# Declara la clase ToolboxProcess y declara una serie de
5
# constantes de utilidad para ser usadas en la creacion
6
# de geoprocesos.
7
# La clase ToolboxProcess esta pensada para ser usada como
8
# clase base para crear procesos desde scripting con python.
9
#
10
#
11

    
12

    
13
use_plugin("org.gvsig.geoprocess.app.mainplugin")
14

    
15
from org.gvsig.geoprocess.lib.sextante import AbstractSextanteGeoProcess
16
from es.unex.sextante.outputs import OutputVectorLayer
17
from es.unex.sextante.dataObjects import IVectorLayer
18
from es.unex.sextante.additionalInfo import AdditionalInfoNumericalValue
19
from org.gvsig.geoprocess.lib.api import GeoProcessLocator
20
from es.unex.sextante.gui.core import SextanteGUI
21
from org.gvsig.tools.dispose import DisposeUtils
22
from  es.unex.sextante.core import Sextante
23

    
24

    
25
SHAPE_TYPE_POINT = IVectorLayer.SHAPE_TYPE_POINT
26
SHAPE_TYPE_LINE = IVectorLayer.SHAPE_TYPE_LINE
27
SHAPE_TYPE_POLYGON = IVectorLayer.SHAPE_TYPE_POLYGON
28
SHAPE_TYPE_MIXED = IVectorLayer.SHAPE_TYPE_MIXED
29
SHAPE_TYPE_MULTIPOINT = IVectorLayer.SHAPE_TYPE_MULTIPOINT
30
SHAPE_TYPE_MULTILINE = IVectorLayer.SHAPE_TYPE_MULTILINE
31
SHAPE_TYPE_MULTIPOLYGON = IVectorLayer.SHAPE_TYPE_MULTIPOLYGON
32
SHAPE_TYPE_WRONG = IVectorLayer.SHAPE_TYPE_WRONG
33
SHAPE_TYPE_UNDEFINED = SHAPE_TYPE_WRONG
34

    
35
NUMERICAL_VALUE_INTEGER = AdditionalInfoNumericalValue.NUMERICAL_VALUE_INTEGER
36
NUMERICAL_VALUE_DOUBLE = AdditionalInfoNumericalValue.NUMERICAL_VALUE_DOUBLE
37

    
38
class ToolboxProcess(AbstractSextanteGeoProcess):
39

    
40
  def __init__(self):
41
    self.__maxrange = 0
42
    self.__countrange = 0
43

    
44
  def getCommandLineName(self):
45
    """
46
Este metodo debe ser sobreescrito en Jython para que funcione correctamente el geoproceso.
47
No se debe sobreescribir en nuestro geoproceso.
48
    """
49
    return self.__class__.__name__
50

    
51
  def getNewInstance(self):
52
    """
53
Este metodo debe ser sobreescrito en Jython para que funcione correctamente el geoproceso.
54
No se debe sobreescribir en nuestro geoproceso.
55
    """
56
    alg = self.__class__()
57
    alg.setName(self.getName())
58
    alg.setGroup(self.getGroup())
59

    
60
    alg.setParameters(self.getParameters().getNewInstance())
61
    alg.setOutputObjects(self.getOutputObjects().getNewInstance())
62
    return alg;
63

    
64
  def setRangeOfValues(self,start,end):
65
    """
66
Metodo que debe ser invocado para fijar los limites de la iteracion del geoproceso.
67
Se encarga de actualizar las barras de progreso asociadas a nuestros geoprocesos.
68
    """
69
    self.__maxrange = end
70
    self.__countrange = 0
71
    self.getStatus().setRangeOfValues(1,end)
72
    self.setProgress(0, end)
73

    
74
  def next(self):
75
    """
76
Incrementa el progreso de nuestro proceso.
77
    """
78
    self.__countrange+=1
79
    self.setCurValue(self.__countrange)
80

    
81
  def isCanceled(self):
82
    """
83
Nos informa si el usuario a cancelado el proceso.
84
    """
85
    return self.getTaskMonitor().isCanceled()
86

    
87
  def setCurValue(self,current):
88
    """
89
Fija el progreso de nuestro proceso en el valor indicado como parametro.
90
    """
91
    self.getStatus().setCurValue(current)
92
    self.setProgress(current, self.__maxrange);
93

    
94
  def createNewFeature(self, store, feature=None):
95
    """
96
Crea una nueva feature o entidad asociada al almacen (store) pasado como parametro.
97
Esta nueva feature podra ser insertada en el almancen inficado como parametro.
98
Si se ha indicado como parametro una feature, se copiaran los datos de esta sobre la nueva.
99
    """
100
    newfeature = store.createNewFeature()
101
    if feature!=None:
102
      for field in newfeature.getType().iterator():
103
        try:
104
          value = feature.get(field.getName())
105
          newfeature.set(field.getName(), value)
106
        except:
107
          # Ignoramos errores ya que es facil que hayan campo que no existen en una u otra
108
          # feature o que no son del mismo tipo.
109
          pass
110
    return newfeature
111

    
112
  def selfregister(self, groupname):
113
    """
114
Registra el geoproceso en la lista de geoprocesos disponibles.
115
    """
116
    Sextante.addGeoalgorithm(groupname,self.__class__())
117

    
118
  def updateToolbox(self):
119
    """
120
Fuerza que se actualize el interface de usuario de la Toolbox.
121
    """
122
    SextanteGUI.getGUIFactory().updateToolbox()
123