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
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