Revision 2745

View differences:

org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.polarmatrix/src/main/java/org/gvsig/vectorediting/lib/prov/polarmatrix/PolarMatrixEditingProvider.java
56 56
import org.gvsig.symbology.SymbologyManager;
57 57
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.text.ISimpleTextSymbol;
58 58
import org.gvsig.tools.ToolsLocator;
59
import org.gvsig.tools.dataTypes.DataTypes;
59 60
import org.gvsig.tools.dispose.DisposableIterator;
60 61
import org.gvsig.tools.dispose.DisposeUtils;
61 62
import org.gvsig.tools.dynobject.DynObject;
......
72 73
import org.gvsig.vectorediting.lib.spi.AbstractEditingProvider;
73 74
import org.gvsig.vectorediting.lib.spi.DefaultDrawingStatus;
74 75
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameter;
76
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameterOptions;
75 77
import org.gvsig.vectorediting.lib.spi.EditingProvider;
76 78
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
77 79
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
......
128 130
                "number_of_total_elements", EditingServiceParameter.TYPE.VALUE);
129 131

  
130 132
        I18nManager i18nManager = ToolsLocator.getI18nManager();
131
        Map<String, String> options = new LinkedHashMap<>();
132
        options.put(i18nManager.getTranslation("key_yes"), "yes");
133
        options.put(i18nManager.getTranslation("key_no"), "no");
134

  
135 133
        EditingProviderServices editingProviderServices =
136 134
            (EditingProviderServices) getProviderServices();
137 135

  
136
        DefaultEditingServiceParameterOptions options = new DefaultEditingServiceParameterOptions()
137
                .add(i18nManager.getTranslation("_yes"), true, i18nManager.getTranslation("_short_yes"))
138
                .add(i18nManager.getTranslation("_no"), false, i18nManager.getTranslation("_short_no"));
139
        
140
        String consoleMsg
141
                = editingProviderServices.makeConsoleMessage(
142
                        "rotate_elements", options);
143

  
138 144
        this.rotateElements =
139
            new DefaultEditingServiceParameter("rotate_elements",
140
                editingProviderServices.makeConsoleMessage("rotate_elements",
141
                    options), options, EditingServiceParameter.TYPE.OPTION);
145
            new DefaultEditingServiceParameter(
146
                    "rotate_elements",
147
                    consoleMsg,
148
                    options,
149
                    i18nManager.getTranslation("_short_no"),
150
                    EditingServiceParameter.TYPE.OPTION).setDataType(DataTypes.BOOLEAN);
142 151

  
143 152
        this.centerPoint =
144 153
            new DefaultEditingServiceParameter("center", "center",
......
187 196
            Double angle = (Double) values.get(elementAngle);
188 197
            if (angle == null) {
189 198
                angle = GeometryUtils.calculateAngle(centerPointValue, mousePosition);
199
                
200
                Integer elements = (Integer) values.get(elementsNumber);
201
                if(elements != null){
202
                    if(angle > 2*Math.PI/(elements-1)){
203
                        angle = 2*Math.PI/(elements-1);
204
                    }
205
                }
206

  
207
                
190 208
//                try {
191 209
//                    angle =
192 210
//                        editingProviderServices.getAngle(centerPointValue,
......
358 376
        throws GeometryOperationNotSupportedException,
359 377
        GeometryOperationException, CreateGeometryException {
360 378

  
361
        Geometry[] geometryMatrix = new Geometry[elementsNumberValue];
379
        Geometry[] geometryMatrix = new Geometry[elementsNumberValue-1];
362 380

  
363
        for (int i = 0; i < elementsNumberValue; i++) {
381
        for (int i = 0; i < elementsNumberValue-1; i++) {
364 382

  
365 383
            AffineTransform at = new AffineTransform();
366 384
            if (rotateElementsValue) {
367
                at = getRotateAffineTransform(centerPointValue, angle * i);
385
                at = getRotateAffineTransform(centerPointValue, angle * (i+1));
368 386
            } else {
369
                at = getRotateAffineTransform(centerPointValue, angle * i);
387
                at = getRotateAffineTransform(centerPointValue, angle * (i+1));
370 388
                
371 389
                double centerX = geometry.getEnvelope().getCenter(0);
372 390
                double centerY = geometry.getEnvelope().getCenter(1);
......
398 416
        List<EditingServiceParameter> parameters =
399 417
            new ArrayList<>();
400 418
        parameters.add(selection);
419
        parameters.add(elementsNumber);
401 420
        parameters.add(rotateElements);
402 421
        parameters.add(centerPoint);
403 422
        parameters.add(elementAngle);
......
428 447
                insertedValue = true;
429 448
            }
430 449

  
431
        } else if (parameter.equals(elementsNumber) && value instanceof Double) {
450
        } else if (parameter.equals(elementsNumber) && value instanceof Number) {
432 451

  
433
            if (value instanceof Double) {
434
                Double number = (Double) value;
435
                values.put(parameter, number.intValue());
452
                int number = ((Number) value).intValue();
453
                
454
                Number angle = ((Number) values.get(elementAngle));
455
                if(angle != null){
456
                    double radians = Math.toRadians(angle.doubleValue());
457
                    if(radians > 2*Math.PI/(number-1)){
458
                        throw new InvalidEntryException(null);
459
                    }
460
                }
461
                
462
                values.put(parameter, number);
436 463
                insertedValue = true;
437
            }
438 464

  
439 465
        } else if (parameter.equals(rotateElements) && value instanceof String) {
440 466

  
441
            String option = (String) value;
442
            I18nManager i18nManager = ToolsLocator.getI18nManager();
443
            if (option.equalsIgnoreCase(i18nManager.getTranslation("key_yes"))) {
444
                values.put(rotateElements, true);
445
                insertedValue = true;
446
            } else if (option.equalsIgnoreCase(i18nManager
447
                .getTranslation("key_no"))) {
448
                values.put(rotateElements, false);
449
                insertedValue = true;
450
            }
467
            values.put(parameter, parameter.getOptions2().getValue(value, parameter.getDefaultValue()));
451 468

  
469
//            String option = (String) value;
470
//            I18nManager i18nManager = ToolsLocator.getI18nManager();
471
//            if (option.equalsIgnoreCase(i18nManager.getTranslation("key_yes"))) {
472
//                values.put(rotateElements, true);
473
//                insertedValue = true;
474
//            } else if (option.equalsIgnoreCase(i18nManager
475
//                .getTranslation("key_no"))) {
476
//                values.put(rotateElements, false);
477
//                insertedValue = true;
478
//            }
479

  
452 480
        } else if (parameter.equals(centerPoint) && value instanceof Point) {
453 481

  
454 482
            values.put(centerPoint, value);
......
459 487
            if (value instanceof Double) {
460 488
                LOGGER.info("value Double:"+value.toString());
461 489

  
462
                values.put(elementAngle, Math.toRadians((Double) value));
490
                Integer elements = (Integer) values.get(elementsNumber);
491
                double radians = Math.toRadians((Double) value);
492
                if(elements != null){
493
                    if(radians > 2*Math.PI/(elements-1)){
494
                        throw new InvalidEntryException(null);
495
                    }
496
                }
497
                values.put(elementAngle, radians);
463 498
                insertedValue = true;
464 499

  
465 500
            } else if (value instanceof Point) {
......
467 502
                Point centerPointValue = (Point) values.get(centerPoint);
468 503
                Point valuePoint = (Point) value;
469 504
                    double angle = GeometryUtils.calculateAngle(centerPointValue, valuePoint);
505
                    Integer elements = (Integer) values.get(elementsNumber);
506
                    if(elements != null){
507
                        if(angle > 2*Math.PI/(elements-1)){
508
                            throw new InvalidEntryException(null);
509
                        }
510
                    }
470 511
                    values.put(elementAngle, angle);
471 512
                    insertedValue = true;
472 513
//                try {

Also available in: Unified diff