Revision 132

View differences:

org.gvsig.dxf/trunk/org.gvsig.dxf/org.gvsig.dxf.provider/src/main/java/org/gvsig/fmap/dal/store/dxf/DXFStoreProvider.java
82 82
import org.gvsig.tools.dispose.DisposableIterator;
83 83
import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
84 84
import org.gvsig.tools.dynobject.exception.DynMethodException;
85
import org.gvsig.tools.exception.BaseException;
85 86
import org.gvsig.tools.exception.NotYetImplemented;
86 87
import org.gvsig.tools.logger.FilteredLogger;
87 88
import org.gvsig.tools.persistence.PersistentState;
......
135 136
    public DXFStoreProvider(DXFStoreParameters parameters,
136 137
        DataStoreProviderServices storeServices) throws InitializeException {
137 138
        super(
138
            parameters, 
139
            parameters,
139 140
            storeServices,
140 141
            FileHelper.newMetadataContainer(METADATA_DEFINITION_NAME)
141 142
        );
......
378 379
            this.taskStatus.remove();
379 380
        }
380 381
    }
381
    
382

  
382 383
    public static void initializeFeatureType(EditableFeatureType featureType, IProjection projection, int geometrySubtype){
383 384
        featureType.setHasOID(true);
384 385

  
......
390 391
        EditableFeatureAttributeDescriptor attr = featureType.add(
391 392
            NAME_FIELD_GEOMETRY, DataTypes.GEOMETRY);
392 393
        attr.setSRS(projection);
393
        attr.setGeometryType(Geometry.TYPES.GEOMETRY);			
394
        attr.setGeometryType(Geometry.TYPES.GEOMETRY);
394 395
        //If is a 3D file, set the geometry subtype
395 396
        attr.setGeometrySubType(geometrySubtype);
396
        
397

  
397 398
//        ID_FIELD_GEOMETRY = 1; //attr.getIndex();
398 399

  
399 400
        featureType.setDefaultGeometryAttributeName(NAME_FIELD_GEOMETRY);
400 401

  
401 402
        // FIXME: Cual es el size y el valor por defecto para Entity ?
402
//        ID_FIELD_ENTITY = 2; 
403
//        ID_FIELD_ENTITY = 2;
403 404
        featureType.add(NAME_FIELD_ENTITY,
404 405
            DataTypes.STRING, 100)
405 406
            .setDefaultValue("")
......
502 503
                geometrySubtype = Geometry.SUBTYPES.GEOM3D;
503 504
            }else{
504 505
            	geometrySubtype = Geometry.SUBTYPES.GEOM2D;
505
            }			
506
            }
506 507
			EditableFeatureType featureType = store.createFeatureType(getName());
507 508
            initializeFeatureType(featureType, this.projection, geometrySubtype);
508 509

  
......
663 664
                }
664 665
            }
665 666
        }
666
        
667

  
667 668
        public void load() throws DataException {
668 669

  
669 670
            this.envelope = null;
......
717 718
            }
718 719

  
719 720
            FilteredLogger logger = new FilteredLogger(DXFStoreProvider.logger,"DXFLoafing",20);
720
            
721

  
721 722
            FeatureType ft = store.getStoreServices().getDefaultFeatureType();
722 723
            taskStatus.message("_loading");
723 724
            // Nos recorremos las geometrias tres veces para cargarlas en orden:
724 725
            // - poligonos
725 726
            // - lineas
726 727
            // - puntos
727
            // Y garantizar que siempre se pinten los puntos sobre lineas y 
728
            // Y garantizar que siempre se pinten los puntos sobre lineas y
728 729
            // poligonos y las lineas sobre los polignos.
729 730
            int n = 0;
730 731
            taskStatus.setRangeOfValues(0,features.size()*3);
......
828 829
                GeometryType type = geom.getGeometryType();
829 830
                boolean geometrySupported = true;
830 831

  
831
                if ((TYPES.POINT == type.getType()) && (SUBTYPES.GEOM3D == type.getSubType())) {
832
                if ((type.isTypeOf(TYPES.POINT)) && (SUBTYPES.GEOM3D == type.getSubType())) {
832 833
                    dxf3DFile = true;
833 834
                    k = createPoint3D(handle, k, feature);
834 835

  
835
                } else if ((TYPES.POINT == type.getType()) && (SUBTYPES.GEOM2D == type.getSubType())) {
836
                } else if ((type.isTypeOf(TYPES.POINT)) && (SUBTYPES.GEOM2D == type.getSubType())) {
836 837
                    k = createPoint2D(handle, k, feature);
837 838

  
838
                } else if ((TYPES.CURVE == type.getType()) && (SUBTYPES.GEOM3D == type.getSubType())) {
839
                } else if ((type.isTypeOf(TYPES.ARC)) && (SUBTYPES.GEOM2D == type.getSubType())) {
840
                    k = createArc2D(handle, k, feature);
841

  
842
                } else if ((type.isTypeOf(TYPES.CURVE) || type.isTypeOf(TYPES.MULTICURVE)) && (SUBTYPES.GEOM3D == type.getSubType())) {
839 843
                    dxf3DFile = true;
840 844
                    k = createPolyline3D(handle, k, feature);
841 845

  
842
                } else if ((TYPES.ARC == type.getType()) && (SUBTYPES.GEOM2D == type.getSubType())) {
843
                    k = createArc2D(handle, k, feature);
844

  
845
                } else if ((TYPES.CURVE == type.getType()) && (SUBTYPES.GEOM2D == type.getSubType())) {
846
                } else if ((type.isTypeOf(TYPES.CURVE) || type.isTypeOf(TYPES.MULTICURVE)) && (SUBTYPES.GEOM2D == type.getSubType())) {
846 847
                    k = createLwPolyline2D(handle, k, feature, false);
847 848

  
848
                } else if ((TYPES.SURFACE == type.getType()) && (SUBTYPES.GEOM3D == type.getSubType())) {
849
                    dxf3DFile = true;
850
                    k = createPolyline3D(handle, k, feature);
851

  
852
                } else if ((TYPES.CIRCLE == type.getType()) && (SUBTYPES.GEOM2D == type.getSubType())) {
849
                } else if ((type.isTypeOf(TYPES.CIRCLE)) && (SUBTYPES.GEOM2D == type.getSubType())) {
853 850
                    k = createCircle2D(handle, k, feature);
854 851

  
855
                } else if ((TYPES.ELLIPSE == type.getType()) && (SUBTYPES.GEOM2D == type.getSubType())) {
852
                } else if ((type.isTypeOf(TYPES.ELLIPSE)) && (SUBTYPES.GEOM2D == type.getSubType())) {
856 853
                    k = createEllipse2D(handle, k, feature);
857 854

  
858
                } else if ((TYPES.SURFACE == type.getType()) && (SUBTYPES.GEOM2D == type.getSubType())) {
855
                } else if ((type.isTypeOf(TYPES.SURFACE) || (type.isTypeOf(TYPES.MULTISURFACE))) && (SUBTYPES.GEOM3D == type.getSubType())) {
856
                    dxf3DFile = true;
857
                    k = createPolyline3D(handle, k, feature);
858

  
859
                } else if ((type.isTypeOf(TYPES.SURFACE) || (type.isTypeOf(TYPES.MULTISURFACE))) && (SUBTYPES.GEOM2D == type.getSubType())) {
859 860
                    k = createLwPolyline2D(handle, k, feature, true);
860 861

  
861 862
                } else {
......
1352 1353
            DxfGroup xvertex = new DxfGroup();
1353 1354
            xvertex.setCode(10);
1354 1355
            Circle circle = (Circle) (feature
1355
                .getDefaultGeometry()).getInternalShape();
1356
                .getDefaultGeometry());
1356 1357
            xvertex.setData(new Double(circle.getCenter().getX()));
1357 1358
            DxfGroup yvertex = new DxfGroup();
1358 1359
            yvertex.setCode(20);
......
1378 1379

  
1379 1380
        private int createArc2D(int handle, int k, FeatureProvider feature)
1380 1381
        throws Exception {
1381
            Arc arc = (Arc) (feature.getDefaultGeometry())
1382
            .getInternalShape();
1382
            Arc arc = (Arc) (feature.getDefaultGeometry());
1383

  
1383 1384
            org.gvsig.fmap.geom.primitive.Point[] pts = new org.gvsig.fmap.geom.primitive.Point[3];
1384 1385
            pts[0] = arc.getInitPoint();
1385
            pts[1] = arc.getCenterPoint();
1386
            pts[1] = arc.getMiddlePoint();
1386 1387
            pts[2] = arc.getEndPoint();
1387 1388
            org.gvsig.fmap.geom.primitive.Point center = arc.getCenterPoint();
1388 1389
            GeometryOperationContext ctx = new GeometryOperationContext();
......
1398 1399
            double endAngle = ((Double)geomManager.invokeOperation(PointGetAngle.CODE, center, ctx)).doubleValue();
1399 1400
            endAngle = Math.toDegrees(endAngle);
1400 1401

  
1402
            double aux;
1403
            if(initAngle<=endAngle){
1404
                if(initAngle<=midAngle && midAngle<=endAngle){
1405
                    //do nothing
1406
                } else {
1407
                    aux = initAngle;
1408
                    initAngle = endAngle;
1409
                    endAngle = aux;
1410
                }
1411
            } else {
1412
                if(initAngle>=midAngle && midAngle>=endAngle){
1413
                    aux = initAngle;
1414
                    initAngle = endAngle;
1415
                    endAngle = aux;
1416
                } else {
1417
                    //do nothing
1418
                }
1419
            }
1420

  
1401 1421
            DxfGroup ax = new DxfGroup();
1402 1422
            DxfGroup ay = new DxfGroup();
1403 1423
            DxfGroup ac = new DxfGroup();
......
1427 1447
        private int createEllipse2D(int handle, int k, FeatureProvider feature)
1428 1448
        throws Exception {
1429 1449
            Ellipse ellipse = (Ellipse) (feature
1430
                .getDefaultGeometry()).getInternalShape();
1450
                .getDefaultGeometry());
1431 1451

  
1432 1452
            org.gvsig.fmap.geom.primitive.Point center = (org.gvsig.fmap.geom.primitive.Point)geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
1433 1453
            center.setCoordinateAt(0, (ellipse.getAxis1Start().getX() + ellipse.getAxis1End().getX()) / 2);
......
1623 1643
        return resource;
1624 1644
    }
1625 1645

  
1646
    /* (non-Javadoc)
1647
     * @see org.gvsig.fmap.dal.feature.spi.memory.AbstractMemoryStoreProvider#doDispose()
1648
     */
1649
    @Override
1650
    protected void doDispose() throws BaseException {
1651
        super.doDispose();
1652
        resource.removeConsumer(this);
1653
    }
1654

  
1626 1655
}

Also available in: Unified diff