Revision 5130 org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.lib/org.gvsig.legend.urbanhorizontalsignage.lib.impl/src/main/java/org/gvsig/legend/urbanhorizontalsignage/lib/impl/DefaultUrbanHorizontalSignageManager.java

View differences:

DefaultUrbanHorizontalSignageManager.java
116 116
                        
117 117
                    case CONTINUITY_MODE_CONT_CONT:
118 118
                        //Left
119
                        Geometry leftGeom = line.cloneGeometry().offset(-offsetValueInMeters).buffer(
120
                                bufferValueInMeters,
121
                                data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
122
                                true
123
                        );
124
                        segments.addPrimitives(leftGeom);
119
                        addOffsetedAndBufferedSegment(segments, line, -offsetValueInMeters, bufferValueInMeters, data);
125 120
                        //Right
126
                        Geometry rightGeom = line.cloneGeometry().offset(offsetValueInMeters).buffer(
127
                                bufferValueInMeters,
128
                                data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
129
                                true
130
                        );
131
                        segments.addPrimitives(rightGeom);
121
                        addOffsetedAndBufferedSegment(segments, line, offsetValueInMeters, bufferValueInMeters, data);
132 122
                        break;
133 123
                        
134 124
                    case CONTINUITY_MODE_CONT_DISC:
135 125
                        //Left
136
                        leftGeom = line.cloneGeometry().offset(-offsetValueInMeters).buffer(
137
                                bufferValueInMeters,
138
                                data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
139
                                true
140
                        );
141
                        segments.addPrimitives(leftGeom);
126
                        Geometry leftOffset;
127

  
128
                        if (line.isClosed() && line.getNumVertices() > 2 && line.isCCW()) {
129
                            Line cloned = line.cloneGeometry();
130
                            cloned.flip();
131
                            addOffsetedAndBufferedSegment(segments, cloned, offsetValueInMeters, bufferValueInMeters, data);
132
                        } else {
133
                            addOffsetedAndBufferedSegment(segments, line, -offsetValueInMeters, bufferValueInMeters, data);
134
                        }
142 135
                        //Right
143 136
                        splittedLine = splitLine(line, data.getSegmentsLength(), data.getHolesLength());
144 137
                        splittedSegments = splittedLine.getSegments();
145 138
                        splittedHoles = splittedLine.getHoles();
146 139
                        for (Line segment : splittedSegments) {
147
                            buffer = segment.cloneGeometry().offset(offsetValueInMeters).buffer(
148
                                    bufferValueInMeters,
149
                                    data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
150
                                    true
151
                            );
152
                            segments.addPrimitives(buffer);
140
                            addOffsetedAndBufferedSegment(segments, segment, offsetValueInMeters, bufferValueInMeters, data);
153 141
                        }
154 142
                        for (Line hole : splittedHoles) {
155
                            buffer = hole.cloneGeometry().offset(offsetValueInMeters).buffer(
156
                                    bufferValueInMeters,
157
                                    data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
158
                                    true
159
                            );
160
                            holes.addPrimitives(buffer);
143
                            addOffsetedAndBufferedSegment(holes, hole, offsetValueInMeters, bufferValueInMeters, data);
161 144
                        }
162 145
                        break;
163 146

  
......
167 150
                        splittedSegments = splittedLine.getSegments();
168 151
                        splittedHoles = splittedLine.getHoles();
169 152
                        for (Line segment : splittedSegments) {
170
                            buffer = segment.cloneGeometry().offset(-offsetValueInMeters).buffer(
171
                                    bufferValueInMeters,
172
                                    data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
173
                                    true
174
                            );
175
                            segments.addPrimitives(buffer);
153
                            addOffsetedAndBufferedSegment(segments, segment, -offsetValueInMeters, bufferValueInMeters, data);
176 154
                        }
177 155
                        for (Line hole : splittedHoles) {
178
                            buffer = hole.cloneGeometry().offset(-offsetValueInMeters).buffer(
179
                                    bufferValueInMeters,
180
                                    data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
181
                                    true
182
                            );
183
                            holes.addPrimitives(buffer);
156
                            addOffsetedAndBufferedSegment(holes, hole, -offsetValueInMeters, bufferValueInMeters, data);
184 157
                        }
185 158
                        //Right
186
                        rightGeom = line.cloneGeometry().offset(offsetValueInMeters).buffer(
187
                                bufferValueInMeters,
188
                                data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
189
                                true
190
                        );
191
                        segments.addPrimitives(rightGeom);
159
                        Geometry rightOffset;
160
                        if (line.isClosed() && line.getNumVertices() > 2 && line.isCCW()) {
161
                            Line cloned = line.cloneGeometry();
162
                            cloned.flip();
163
                            addOffsetedAndBufferedSegment(segments, cloned, -offsetValueInMeters, bufferValueInMeters, data);
164
                        } else {
165
                            addOffsetedAndBufferedSegment(segments, line, offsetValueInMeters, bufferValueInMeters, data);
166
                        }
192 167
                        break;
168

  
193 169
                        
194 170
                    case CONTINUITY_MODE_DISC_DISC:
195 171
                        splittedLine = splitLine(line, data.getSegmentsLength(), data.getHolesLength());
......
197 173
                        splittedHoles = splittedLine.getHoles();
198 174
                        //Left
199 175
                        for (Line segment : splittedSegments) {
200
                            buffer = segment.cloneGeometry().offset(-offsetValueInMeters).buffer(
201
                                    bufferValueInMeters,
202
                                    data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
203
                                    true
204
                            );
205
                            segments.addPrimitives(buffer);
176
                            addOffsetedAndBufferedSegment(segments, segment, -offsetValueInMeters, bufferValueInMeters, data);
206 177
                        }
207 178
                        for (Line hole : splittedHoles) {
208
                            buffer = hole.cloneGeometry().offset(-offsetValueInMeters).buffer(
209
                                    bufferValueInMeters,
210
                                    data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
211
                                    true
212
                            );
213
                            holes.addPrimitives(buffer);
179
                            addOffsetedAndBufferedSegment(holes, hole, -offsetValueInMeters, bufferValueInMeters, data);
214 180
                        }
215 181
                        //Right
216 182
                        for (Line segment : splittedSegments) {
217
                            Geometry offset = segment.cloneGeometry().offset(offsetValueInMeters);
218
                            buffer = offset.buffer(
219
                                    bufferValueInMeters,
220
                                    data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
221
                                    true
222
                            );
223
                            segments.addPrimitives(buffer);
183
                            addOffsetedAndBufferedSegment(segments, segment, offsetValueInMeters, bufferValueInMeters, data);
224 184
                        }
225 185
                        for (Line hole : splittedHoles) {
226
                            buffer = hole.cloneGeometry().offset(offsetValueInMeters).buffer(
227
                                    bufferValueInMeters,
228
                                    data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
229
                                    true
230
                            );
231
                            holes.addPrimitives(buffer);
186
                            addOffsetedAndBufferedSegment(holes, hole, offsetValueInMeters, bufferValueInMeters, data);
232 187
                        }
233 188
                        break;
234 189

  
......
239 194
            data.setHolesGeometry(holes);
240 195
        } catch (Exception ex) {
241 196
            LOGGER.warn("Can't calculate geometries.", ex);
242
            //VOY POR AQU?
243

  
244 197
//            Logger.getLogger(DefaultUrbanHorizontalSignageManager.class.getName()).log(Level.SEVERE, null, ex);
245 198
        }
246 199

  
247 200
    }
248 201

  
202
    protected void addOffsetedAndBufferedSegment(MultiPolygon segments, Line segment, final double offsetValueInMeters, final double bufferValueInMeters, UrbanHorizontalSignageData data) throws GeometryOperationException, GeometryOperationNotSupportedException {
203
        Geometry buffer;
204
        Geometry segmentOffset = segment.cloneGeometry().offset(offsetValueInMeters);
205
        if(segmentOffset == null){
206
            return;
207
        }
208
        buffer = segmentOffset.buffer(
209
                bufferValueInMeters,
210
                data.isRoundVertex() ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE,
211
                true
212
        );
213
        segments.addPrimitives(buffer);
214
    }
215

  
249 216
    /*
250 217
        segmentLength & holesLenght in meters
251 218
    */

Also available in: Unified diff