Index: Ring2DM.java
===================================================================
--- Ring2DM.java	(revision 47431)
+++ Ring2DM.java	(revision 47432)
@@ -23,28 +23,24 @@
 package org.gvsig.fmap.geom.jts.primitive.ring;
 
 import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateSequence;
 import com.vividsolutions.jts.geom.GeometryFactory;
 import com.vividsolutions.jts.geom.LinearRing;
 import com.vividsolutions.jts.geomgraph.Position;
 import com.vividsolutions.jts.operation.buffer.BufferParameters;
 import com.vividsolutions.jts.operation.buffer.OffsetCurveBuilder;
-
 import org.cresques.cts.ICoordTrans;
-
 import org.gvsig.fmap.geom.Geometry;
 import org.gvsig.fmap.geom.GeometryException;
 import org.gvsig.fmap.geom.aggregate.MultiLine;
 import org.gvsig.fmap.geom.aggregate.MultiPolygon;
-import org.gvsig.fmap.geom.jts.aggregate.MultiLine2D;
 import org.gvsig.fmap.geom.jts.aggregate.MultiLine2DM;
-import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2D;
 import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon2DM;
-import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine2D;
+import org.gvsig.fmap.geom.jts.mgeom.MCoordinate;
 import org.gvsig.fmap.geom.jts.primitive.curve.line.BaseLine2DM;
-import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2D;
 import org.gvsig.fmap.geom.jts.primitive.curve.line.Line2DM;
-import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2D;
 import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon2DM;
+import org.gvsig.fmap.geom.jts.util.ArrayListCoordinateSequence;
 import org.gvsig.fmap.geom.jts.util.JTSUtils;
 import org.gvsig.fmap.geom.operation.GeometryOperationException;
 import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
@@ -70,7 +66,12 @@
         super(Geometry.TYPES.RING, coordinates);
         closePrimitive();
     }
+    
+    public Ring2DM(ArrayListCoordinateSequence coordinates) {
+        super(Geometry.TYPES.RING, coordinates);
+    }
 
+
     /* (non-Javadoc)
      * @see org.gvsig.fmap.geom.Geometry#cloneGeometry()
      */
@@ -158,7 +159,7 @@
                   return false;
               }
               for(int i=0; i < this.getNumVertices(); i++){
-                  if(other.coordinates.get(i).getOrdinate(2)!=this.coordinates.get(i).getOrdinate(2)){
+                  if(other.coordinates.get(i).getOrdinate(CoordinateSequence.M)!=this.coordinates.get(i).getOrdinate(CoordinateSequence.M)){
                       return false;
                   };
               }
@@ -167,4 +168,49 @@
               return false;
           }
       }
+      
+    @Override
+    public Geometry force2D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        ArrayListCoordinateSequence coordinates2D = new ArrayListCoordinateSequence(coordinates.size());
+        for (Coordinate coordinate : this.coordinates) {
+            coordinates2D.add(new Coordinate(coordinate.x, coordinate.y));
+        }
+        Ring2D ring = new Ring2D(coordinates2D);
+        ring.setProjection(this.getProjection());
+        return ring;
+    }
+
+    @Override
+    public Geometry force2DM() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        ArrayListCoordinateSequence coordinates2DM = new ArrayListCoordinateSequence(coordinates.size());
+        for (Coordinate coordinate : this.coordinates) {
+            coordinates2DM.add(MCoordinate.create2dWithMeasure(coordinate.x, coordinate.y, 0));
+        }
+        Ring2DM ring = new Ring2DM(coordinates2DM);
+        ring.setProjection(this.getProjection());
+        return ring;
+    }
+
+    @Override
+    public Geometry force3D() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        ArrayListCoordinateSequence coordinates3D = new ArrayListCoordinateSequence(coordinates.size());
+        for (Coordinate coordinate : this.coordinates) {
+            coordinates3D.add(new Coordinate(coordinate.x, coordinate.y, 0));
+        }
+        Ring3D ring = new Ring3D(coordinates3D);
+        ring.setProjection(this.getProjection());
+        return ring;
+    }
+
+    @Override
+    public Geometry force3DM() throws GeometryOperationNotSupportedException, GeometryOperationException {
+        ArrayListCoordinateSequence coordinates3DM = new ArrayListCoordinateSequence(coordinates.size());
+        for (Coordinate coordinate : this.coordinates) {
+            coordinates3DM.add(MCoordinate.create3dWithMeasure(coordinate.x, coordinate.y, 0, 0));
+        }
+        Ring3DM ring = new Ring3DM(coordinates3DM);
+        ring.setProjection(this.getProjection());
+        return ring;
+    }
+      
 }
