Personal tools
You are here: Home gvSIG Projects gvSIG Desktop Documentation Developers documentation org.gvsig.fmap.geom 2.0.0 Operations Registro de operaciones
gvSIG Desktop
gvSIG Desktop

Cached time 11/22/13 09:03:42 Clear cache and reload

 
Document Actions

Registro de operaciones

by Jorge Piera last modified 2010-09-06 16:16

Este documento explica cómo registrar una nueva operación asociada a una geometría

.. include-document:: org.gvsig.fmap.geom/reference-links
   :rest:

Para poder utilizar una operación esta ha tenido que ser registrada previamente. Si se intenta ejecutar una operación que no haya sido registrada mediante el GeometryManager_, se obtendrá una exceptión. 

El registro de operaciones se debe hacer en una clase que extienda de GeometryLibrary_, concretamente en el método *postinitialice*. El método *registerGeometryOperation* es el encargado de registrar una operación. Las operaciones se tienen que registrar asociadas a un tipo concreto de geometría (o a más de un tipo) de modo que pueden haber operaciones que sólo sean válidas para un subconjunto de geometrías.

Por ejemplo, la operación PrintLn del apartado anterior se puede ejecutar sobre todos los tipos de geometrías. Para que esto sea así, hay que registrarla del siguiente modo:

.. code-block:: java

  GeometryManager geometryManager = GeometryLocator.getGeometryManager();
  geometryManager.registerOperation("PrintLn", printLn);

El método *registerOperation* acepta dos parámetros: primero está el nombre de la operación y segundo está el objeto que implementa la operación. En este caso se está registrando la operación de dibujado por la salida estándar y se está asociando a todos los tipos de geometrías.

Existe un mecanismo para registrar operaciones asociadas a un tipo de geometría concreta. Podemos por ejemplo crear una operación *PrintLn* que únicamente sea capaz de escribir por pantalla puntos en 2 dimensiones. La operación sería la siguiente:

.. code-block:: java

  public class printLnPoint2D extends GeometryOperation {
    public static final String NAME = "println";
    public static final int CODE = GeometryLocator.getGeometryManager().getGeometryOperationCode(NAME);

    public int getOperationIndex() {
      return CODE;
    }

    public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
      Point point = (Point)geom;
      System.out.println("Point 2D, X=" + point.getX() + " Y=" + point.getY());		
      return null;
    }
  }

Esta operación sólo sabe manejar objetos de tipo *Point* en 2 dimensiones, por lo que en el método *registerOperation* de registro se tienen que especificar dos nuevos parámetros con el tipo y el subtipo de la geometría sobre la que se aplica esta operación. Cuando se invoque la operación *PrintLn", se ejecutará el código de la operación "PrintLn" para todos los tipos de geomtría menos para el *Point* en 2 dimensiones, que ejecutará el código de la operación específica.

.. code-block:: java

  GeometryManager geometryManager = GeometryLocator.getGeometryManager();
  geometryManager.registerOperation("PrintLn", printLnPoint2D, Geometry.TYPES.Point, Geometry.SUBTYPES.GEOM2D);

Existe otra sobrecarga del método *registerOperation* que permite asociar una operación a todas las geometrías de un tipo determinado (con independencia del subtipo). Un ejemplo podría ser la siguiente operación que imprime por pantalla cualquier tipo de punto, independientemente de su dimensión.

.. code-block:: java

  public class printLnPoint extends GeometryOperation {
    public static final String NAME = "println";
    public static final int CODE = GeometryLocator.getGeometryManager().getGeometryOperationCode(NAME);

    public int getOperationIndex() {
      return CODE;
    }

    public Object invoke(Geometry geom, GeometryOperationContext ctx) throws GeometryOperationException {
      Point point = (Point)geom;
      System.out.println("Point, ");
      for (int i=0 ; i
        

View source document

View source document Get permanent link


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: