source: osm/applications/editors/josm/plugins/smed2/src/seamap/Rules.java@ 30022

Last change on this file since 30022 was 30022, checked in by malcolmh, 13 years ago

save

File size: 40.2 KB
Line 
1/* Copyright 2013 Malcolm Herring
2 *
3 * This is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, version 3 of the License.
6 *
7 * For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
8 */
9
10package seamap;
11
12import java.awt.Color;
13import java.awt.Font;
14import java.awt.geom.AffineTransform;
15import java.util.ArrayList;
16
17import s57.S57val.*;
18import s57.S57att.*;
19import s57.S57obj.*;
20
21import seamap.SeaMap.*;
22import symbols.*;
23import symbols.Symbols.*;
24
25public class Rules {
26
27 static SeaMap map;
28 static int zoom;
29
30 public static void rules (SeaMap m, int z) {
31 map = m;
32 zoom = z;
33 ArrayList<Feature> objects;
34 if ((objects = map.features.get(Obj.SLCONS)) != null) for (Feature feature : objects) shoreline(feature);
35 if ((objects = map.features.get(Obj.SLCONS)) != null) for (Feature feature : objects) shoreline(feature);;
36 if ((objects = map.features.get(Obj.PIPSOL)) != null) for (Feature feature : objects) pipelines(feature);
37 if ((objects = map.features.get(Obj.CBLSUB)) != null) for (Feature feature : objects) cables(feature);
38 if ((objects = map.features.get(Obj.PIPOHD)) != null) for (Feature feature : objects) pipelines(feature);
39 if ((objects = map.features.get(Obj.CBLOHD)) != null) for (Feature feature : objects) cables(feature);
40 if ((objects = map.features.get(Obj.TSEZNE)) != null) for (Feature feature : objects) separation(feature);
41 if ((objects = map.features.get(Obj.TSSCRS)) != null) for (Feature feature : objects) separation(feature);
42 if ((objects = map.features.get(Obj.TSSRON)) != null) for (Feature feature : objects) separation(feature);
43 if ((objects = map.features.get(Obj.TSELNE)) != null) for (Feature feature : objects) separation(feature);
44 if ((objects = map.features.get(Obj.TSSLPT)) != null) for (Feature feature : objects) separation(feature);
45 if ((objects = map.features.get(Obj.TSSBND)) != null) for (Feature feature : objects) separation(feature);
46 if ((objects = map.features.get(Obj.ISTZNE)) != null) for (Feature feature : objects) separation(feature);
47 if ((objects = map.features.get(Obj.SNDWAV)) != null) for (Feature feature : objects) areas(feature);
48 if ((objects = map.features.get(Obj.OSPARE)) != null) for (Feature feature : objects) areas(feature);
49 if ((objects = map.features.get(Obj.FAIRWY)) != null) for (Feature feature : objects) areas(feature);
50 if ((objects = map.features.get(Obj.DRGARE)) != null) for (Feature feature : objects) areas(feature);
51 if ((objects = map.features.get(Obj.RESARE)) != null) for (Feature feature : objects) areas(feature);
52 if ((objects = map.features.get(Obj.SPLARE)) != null) for (Feature feature : objects) areas(feature);
53 if ((objects = map.features.get(Obj.SEAARE)) != null) for (Feature feature : objects) areas(feature);
54 if ((objects = map.features.get(Obj.OBSTRN)) != null) for (Feature feature : objects) obstructions(feature);
55 if ((objects = map.features.get(Obj.UWTROC)) != null) for (Feature feature : objects) obstructions(feature);
56 if ((objects = map.features.get(Obj.MARCUL)) != null) for (Feature feature : objects) areas(feature);
57 if ((objects = map.features.get(Obj.WTWAXS)) != null) for (Feature feature : objects) waterways(feature);
58 if ((objects = map.features.get(Obj.RECTRC)) != null) for (Feature feature : objects) transits(feature);
59 if ((objects = map.features.get(Obj.NAVLNE)) != null) for (Feature feature : objects) transits(feature);
60 if ((objects = map.features.get(Obj.HRBFAC)) != null) for (Feature feature : objects) harbours(feature);
61 if ((objects = map.features.get(Obj.ACHARE)) != null) for (Feature feature : objects) harbours(feature);
62 if ((objects = map.features.get(Obj.ACHBRT)) != null) for (Feature feature : objects) harbours(feature);
63 if ((objects = map.features.get(Obj.LOKBSN)) != null) for (Feature feature : objects) locks(feature);
64 if ((objects = map.features.get(Obj.LKBSPT)) != null) for (Feature feature : objects) locks(feature);
65 if ((objects = map.features.get(Obj.GATCON)) != null) for (Feature feature : objects) locks(feature);
66 if ((objects = map.features.get(Obj.DISMAR)) != null) for (Feature feature : objects) distances(feature);
67 if ((objects = map.features.get(Obj.HULKES)) != null) for (Feature feature : objects) ports(feature);
68 if ((objects = map.features.get(Obj.CRANES)) != null) for (Feature feature : objects) ports(feature);
69 if ((objects = map.features.get(Obj.LNDMRK)) != null) for (Feature feature : objects) landmarks(feature);
70 if ((objects = map.features.get(Obj.MORFAC)) != null) for (Feature feature : objects) moorings(feature);
71 if ((objects = map.features.get(Obj.NOTMRK)) != null) for (Feature feature : objects) notices(feature);
72 if ((objects = map.features.get(Obj.SMCFAC)) != null) for (Feature feature : objects) marinas(feature);
73 if ((objects = map.features.get(Obj.BRIDGE)) != null) for (Feature feature : objects) bridges(feature);
74 if ((objects = map.features.get(Obj.LITMAJ)) != null) for (Feature feature : objects) lights(feature);
75 if ((objects = map.features.get(Obj.LITMIN)) != null) for (Feature feature : objects) lights(feature);
76 if ((objects = map.features.get(Obj.LIGHTS)) != null) for (Feature feature : objects) lights(feature);
77 if ((objects = map.features.get(Obj.SISTAT)) != null) for (Feature feature : objects) signals(feature);
78 if ((objects = map.features.get(Obj.SISTAW)) != null) for (Feature feature : objects) signals(feature);
79 if ((objects = map.features.get(Obj.CGUSTA)) != null) for (Feature feature : objects) signals(feature);
80 if ((objects = map.features.get(Obj.RDOSTA)) != null) for (Feature feature : objects) signals(feature);
81 if ((objects = map.features.get(Obj.RADSTA)) != null) for (Feature feature : objects) signals(feature);
82 if ((objects = map.features.get(Obj.RSCSTA)) != null) for (Feature feature : objects) signals(feature);
83 if ((objects = map.features.get(Obj.PILBOP)) != null) for (Feature feature : objects) signals(feature);
84 if ((objects = map.features.get(Obj.WTWGAG)) != null) for (Feature feature : objects) gauges(feature);
85 if ((objects = map.features.get(Obj.OFSPLF)) != null) for (Feature feature : objects) platforms(feature);
86 if ((objects = map.features.get(Obj.WRECKS)) != null) for (Feature feature : objects) wrecks(feature);
87 if ((objects = map.features.get(Obj.LITVES)) != null) for (Feature feature : objects) floats(feature);
88 if ((objects = map.features.get(Obj.LITFLT)) != null) for (Feature feature : objects) floats(feature);
89 if ((objects = map.features.get(Obj.BOYINB)) != null) for (Feature feature : objects) floats(feature);
90 if ((objects = map.features.get(Obj.BOYLAT)) != null) for (Feature feature : objects) buoys(feature);
91 if ((objects = map.features.get(Obj.BOYCAR)) != null) for (Feature feature : objects) buoys(feature);
92 if ((objects = map.features.get(Obj.BOYISD)) != null) for (Feature feature : objects) buoys(feature);
93 if ((objects = map.features.get(Obj.BOYSAW)) != null) for (Feature feature : objects) buoys(feature);
94 if ((objects = map.features.get(Obj.BOYSPP)) != null) for (Feature feature : objects) buoys(feature);
95 if ((objects = map.features.get(Obj.BOYWTW)) != null) for (Feature feature : objects) buoys(feature);
96 if ((objects = map.features.get(Obj.BCNLAT)) != null) for (Feature feature : objects) beacons(feature);
97 if ((objects = map.features.get(Obj.BCNCAR)) != null) for (Feature feature : objects) beacons(feature);
98 if ((objects = map.features.get(Obj.BCNISD)) != null) for (Feature feature : objects) beacons(feature);
99 if ((objects = map.features.get(Obj.BCNSAW)) != null) for (Feature feature : objects) beacons(feature);
100 if ((objects = map.features.get(Obj.BCNSPP)) != null) for (Feature feature : objects) beacons(feature);
101 if ((objects = map.features.get(Obj.BCNWTW)) != null) for (Feature feature : objects) beacons(feature);
102 }
103
104 private static void areas(Feature feature) {
105 AttItem name = feature.atts.get(Att.OBJNAM);
106 switch (feature.type) {
107 case DRGARE:
108 if (zoom < 16)
109 Renderer.lineVector(feature, new LineStyle(Color.black, 8, new float[] { 25, 25 }, new Color(0x40ffffff, true)));
110 else
111 Renderer.lineVector(feature, new LineStyle(Color.black, 8, new float[] { 25, 25 }, null));
112 if ((zoom >= 12) && (name != null))
113 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.PLAIN, 100), Color.black, null);
114 break;
115 case FAIRWY:
116 if (feature.area > 2.0) {
117 if (zoom < 16)
118 Renderer.lineVector(feature, new LineStyle(new Color(0xc480ff), 8, new float[] { 50, 50 }, new Color(0x40ffffff, true)));
119 else
120 Renderer.lineVector(feature, new LineStyle(new Color(0xc480ff), 8, new float[] { 50, 50 }, null));
121 } else {
122 if (zoom >= 14)
123 Renderer.lineVector(feature, new LineStyle(new Color(0x40ffffff, true), 0, null, null));
124 }
125 break;
126 case MARCUL:
127 if (zoom >= 14)
128 Renderer.symbol(feature, Areas.MarineFarm, Obj.MARCUL, null, null);
129 if (zoom >= 16)
130 Renderer.lineVector(feature, new LineStyle( Color.black, 4, new float[] { 10, 10 }, null));
131 break;
132 case OSPARE:
133 if ((CatPRA)Renderer.getAttVal(feature, feature.type, 0, Att.CATPRA) == CatPRA.PRA_WFRM) {
134 Renderer.symbol(feature, Areas.WindFarm, Obj.OSPARE, null, null);
135 Renderer.lineVector(feature, new LineStyle(Color.black, 20, new float[] { 40, 40 }, null));
136 if ((zoom >= 15) && (name != null))
137 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), Color.black, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 10)));
138 }
139 break;
140 case RESARE:
141 if (zoom >= 12) {
142 Renderer.lineSymbols(feature, Areas.Restricted, 1.0, null, 0, new Color(0x80c480));
143// if ((CatREA)Renderer.getAttVal(feature, feature.type, 0, Att.CATREA) == CatREA.REA_NWAK)
144// Renderer.symbol(feature, Areas.NoWake, Obj.RESARE, null);
145 }
146 break;
147 case SEAARE:
148 switch ((CatSEA) Renderer.getAttVal(feature, feature.type, 0, Att.CATSEA)) {
149 case SEA_RECH:
150 break;
151 case SEA_BAY:
152 break;
153 case SEA_SHOL:
154 break;
155 case SEA_GAT:
156 case SEA_NRRW:
157 break;
158 }
159 break;
160/*
161 if (is_type("sea_area")) {
162 if (has_attribute("category")) {
163 make_string("");
164 attribute_switch("category")
165 attribute_case("reach") { if (zoom >= 10) add_string("font-family:Arial;font-weight:normal;font-style:italic;font-size:150;text-anchor:middle") }
166 attribute_case("bay") { if (zoom >= 12) add_string("font-family:Arial;font-weight:normal;font-style:italic;font-size:150;text-anchor:middle") }
167 attribute_case("shoal") { if (zoom >= 14) {
168 if (is_area) {
169 area("stroke:#c480ff;stroke-width:4;stroke-dasharray:25,25;fill:none");
170 if (has_item_attribute("name")) text(item_attribute("name"), "font-family:Arial;font-weight:normal;font-style:italic;font-size:75;text-anchor:middle", 0, -40);
171 text("(Shoal)", "font-family:Arial;font-weight:normal;font-size:60;text-anchor:middle", 0, 0);
172 } else if (is_line) {
173 if (has_item_attribute("name")) way_text(item_attribute("name"), "font-family:Arial;font-weight:normal;font-style:italic;font-size:75;text-anchor:middle", 0.5, -40, line("stroke:none;fill:none"));
174 way_text("(Shoal)", "font-family:Arial;font-weight:normal;font-size:60;text-anchor:middle", 0.5, 0, line("stroke:none;fill:none"));
175 } else {
176 if (has_item_attribute("name")) text(item_attribute("name"), "font-family:Arial;font-weight:normal;font-style:italic;font-size:75;text-anchor:middle", 0, -40);
177 text("(Shoal)", "font-family:Arial;font-weight:normal;font-size:60;text-anchor:middle", 0, 0);
178 }
179 }
180 }
181 attribute_case("gat|narrows") { if (zoom >= 12) add_string("font-family:Arial;font-weight:normal;font-style:italic;font-size:100;text-anchor:middle") }
182 end_switch
183 if ((strlen(string) > 0) && !attribute_test("category", "shoal")) {
184 int ref = line("stroke:none;fill:none");
185 if (ref != 0) {
186 if (has_item_attribute("name")) way_text(item_attribute("name"), string, 0.5, 0, ref);
187 } else {
188 if (has_item_attribute("name")) text(item_attribute("name"), string, 0, 0);
189 }
190 }
191 free_string
192 }
193 }
194 */
195 case SNDWAV:
196 if (zoom >= 12) Renderer.fillPattern(feature, Areas.Sandwaves);
197 break;
198 case SPLARE:
199 if (zoom >= 12) {
200 Renderer.symbol(feature, Areas.Plane, Obj.SPLARE, null, null);
201 Renderer.lineSymbols(feature, Areas.Restricted, 0.5, Areas.LinePlane, 10, new Color(0x80c480));
202 }
203 if ((zoom >= 15) && (name != null))
204 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -90)));
205 break;
206 }
207 }
208
209 private static void beacons(Feature feature) {
210 BcnSHP shape = (BcnSHP) Renderer.getAttVal(feature, feature.type, 0, Att.BCNSHP);
211 if (((shape == BcnSHP.BCN_PRCH) || (shape == BcnSHP.BCN_WTHY)) && (feature.type == Obj.BCNLAT)) {
212 CatLAM cat = (CatLAM) Renderer.getAttVal(feature, feature.type, 0, Att.CATLAM);
213 switch (cat) {
214 case LAM_PORT:
215 if (shape == BcnSHP.BCN_PRCH)
216 Renderer.symbol(feature, Beacons.PerchPort, null, null, null);
217 else
218 Renderer.symbol(feature, Beacons.WithyPort, null, null, null);
219 break;
220 case LAM_STBD:
221 if (shape == BcnSHP.BCN_PRCH)
222 Renderer.symbol(feature, Beacons.PerchStarboard, null, null, null);
223 else
224 Renderer.symbol(feature, Beacons.WithyStarboard, null, null, null);
225 break;
226 default:
227 Renderer.symbol(feature, Beacons.Stake, feature.type, null, null);
228 }
229 } else {
230 Renderer.symbol(feature, Beacons.Shapes.get(shape), feature.type, null, null);
231 if (feature.objs.get(Obj.TOPMAR) != null)
232 Renderer.symbol(feature, Topmarks.Shapes.get(feature.objs.get(Obj.TOPMAR).get(0).get(Att.TOPSHP).val), Obj.TOPMAR, Topmarks.Beacons, null);
233 }
234 }
235 private static void buoys(Feature feature) {
236 BoySHP shape = (BoySHP) Renderer.getAttVal(feature, feature.type, 0, Att.BOYSHP);
237 Renderer.symbol(feature, Buoys.Shapes.get(shape), feature.type, null, null);
238 if (feature.objs.get(Obj.TOPMAR) != null) {
239 Renderer.symbol(feature, Topmarks.Shapes.get(feature.objs.get(Obj.TOPMAR).get(0).get(Att.TOPSHP).val), Obj.TOPMAR, Topmarks.Buoys.get(shape), null);
240 }
241 }
242 private static void bridges(Feature feature) {
243 if (zoom >= 16) {
244
245 }
246/* Att_t *attv = getAtt(getObj(item, BRIDGE, 0), VERCLR);
247 if (attv == NULL) attv = getAtt(getObj(item, BRIDGE, 0), VERCSA);
248 Att_t *attc = getAtt(getObj(item, BRIDGE, 0), VERCCL);
249 Att_t *atto = getAtt(getObj(item, BRIDGE, 0), VERCOP);
250 if (attv != NULL) {
251 renderSymbol(item, obja, "clear_v", "", "", CC, 0, 0, 0);
252 drawText(item, stringValue(attv->val), "font-family:Arial; font-weight:normal; font-size:70; text-anchor:middle", 0, 12);
253 }
254 else if ((attc != NULL) && (atto == NULL)) {
255 renderSymbol(item, obja, "clear_v", "", "", CC, 0, 0, 0);
256 drawText(item, stringValue(attc->val), "font-family:Arial; font-weight:normal; font-size:70; text-anchor:middle", 0, 12);
257 }
258 else if ((attc != NULL) && (atto != NULL)) {
259 renderSymbol(item, obja, "clear_v", "", "", RC, 5, 0, 0);
260 drawText(item, stringValue(attc->val), "font-family:Arial; font-weight:normal; font-size:70; text-anchor:middle", -35, 12);
261 renderSymbol(item, obja, "clear_v", "", "", LC, -5, 0, 0);
262 drawText(item, stringValue(atto->val), "font-family:Arial; font-weight:normal; font-size:70; text-anchor:middle", 35, 12);
263 }
264 }
265*/
266 }
267 private static void cables(Feature feature) {
268 if (zoom >= 14) {
269 if (feature.type == Obj.CBLSUB) {
270 Renderer.lineSymbols(feature, Areas.Cable, 0.0, null, 0, new Color(0x80c480));
271 } else if (feature.type == Obj.CBLOHD) {
272
273 }
274 }
275 }
276 private static void distances(Feature feature) {
277/*object_rules(distances) {
278 if ((zoom>=16) && (has_attribute("category"))) {
279 attribute_switch("category")
280 attribute_case("installed") symbol("distance_i");
281 attribute_default symbol("distance_u");
282 end_switch
283 }
284}
285*/
286 }
287 private static void floats(Feature feature) {
288 switch (feature.type) {
289 case LITVES:
290 Renderer.symbol(feature, Buoys.Super, feature.type, null, null);
291 break;
292 case LITFLT:
293 Renderer.symbol(feature, Buoys.Float, feature.type, null, null);
294 break;
295 case BOYINB:
296 Renderer.symbol(feature, Buoys.Super, feature.type, null, null);
297 break;
298 }
299 if (feature.objs.get(Obj.TOPMAR) != null)
300 Renderer.symbol(feature, Topmarks.Shapes.get(feature.objs.get(Obj.TOPMAR).get(0).get(Att.TOPSHP).val), Obj.TOPMAR, Topmarks.Floats, null);
301 }
302 private static void gauges(Feature feature) {
303/*object_rules(gauge) {
304 if (zoom >= 14) symbol("tide_gauge");
305}
306*/
307 }
308 private static void harbours(Feature feature) {
309 AttItem name = feature.atts.get(Att.OBJNAM);
310 switch (feature.type) {
311 case ACHARE:
312 if (zoom >= 12) {
313 if (feature.flag != Fflag.AREA) {
314 Renderer.symbol(feature, Harbours.Anchorage, null, null, new Scheme(Color.black));
315 } else {
316 Renderer.symbol(feature, Harbours.Anchorage, null, null, new Scheme(new Color(0xc480ff)));
317 Renderer.lineSymbols(feature, Areas.Restricted, 1.0, Areas.LineAnchor, 10, new Color(0xc480ff));
318 }
319 if ((zoom >= 15) && ((name) != null)) {
320 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), new Color(0xc480ff), new Delta(Handle.BC, AffineTransform.getTranslateInstance(160, 0)));
321 }
322 }
323 break;
324 }
325 }
326/*
327 * if ((zoom >= 12) && is_type("anchorage")) {
328 symbol("anchorage");
329 if ((zoom >= 15) && (has_item_attribute("name")))
330 text(item_attribute("name"), "font-family:Arial; font-weight:bold; font-size:80; text-anchor:middle", 0, -90);
331 if ((zoom >= 12) && (is_area)) line_symbols("restricted_line", 0.5, "line_anchor", 10);
332 }
333 if ((zoom >= 16) && is_type("anchor_berth")) symbol("anchor_berth");
334 if ((zoom >= 12) && is_type("harbour")) {
335 if (has_attribute("category")) {
336 attribute_switch("category")
337 attribute_case("marina|yacht") symbol("marina");
338 attribute_case("marina_no_facilities") symbol("marina_nf");
339 attribute_default symbol("harbour");
340 end_switch
341 } else symbol("harbour");
342 if ((zoom >= 15) && (has_item_attribute("name")))
343 text(item_attribute("name"), "font-family:Arial; font-weight:bold; font-size:80; text-anchor:middle", 0, -90);
344 }
345*/
346 private static void landmarks(Feature feature) {
347 ArrayList<CatLMK> cats = (ArrayList<CatLMK>) Renderer.getAttVal(feature, feature.type, 0, Att.CATLMK);
348 Symbol catSym = Landmarks.Shapes.get(cats.get(0));
349 ArrayList<FncFNC> fncs = (ArrayList<FncFNC>) Renderer.getAttVal(feature, feature.type, 0, Att.FUNCTN);
350 Symbol fncSym = Landmarks.Funcs.get(fncs.get(0));
351 if ((fncs.get(0) == FncFNC.FNC_CHCH) && (cats.get(0) == CatLMK.LMK_TOWR))
352 catSym = Landmarks.ChurchTower;
353 if ((cats.get(0) == CatLMK.LMK_UNKN) && (fncs.get(0) == FncFNC.FNC_UNKN) && (feature.objs.get(Obj.LIGHTS) != null))
354 catSym = Beacons.LightMajor;
355 if (cats.get(0) == CatLMK.LMK_RADR)
356 fncSym = Landmarks.RadioTV;
357 Renderer.symbol(feature, catSym, null, null, null);
358 Renderer.symbol(feature, fncSym, null, null, null);
359/* if (!has_attribute("function") && !has_attribute("category") && has_object("light")) {
360 symbol("lighthouse");
361 if ((zoom >= 15) && has_item_attribute("name"))
362 text(item_attribute("name"), "font-family:Arial; font-weight:bold; font-size:80; text-anchor:middle", 0, -70);
363 } else {
364 if ((zoom >= 15) && has_item_attribute("name"))
365 text(item_attribute("name"), "font-family:Arial; font-weight:bold; font-size:80; text-anchor:start", 60, -50);
366 }
367 if (has_object("fog_signal")) object(fogs);
368 if (has_object("radar_transponder")) object(rtbs);
369 if (has_object("radar_station") && (zoom >= 12)) symbol("radar_station");
370 if (has_object("light")) object(lights);
371}
372*/
373 }
374 private static void lights(Feature feature) {
375 switch (feature.type) {
376 case LITMAJ:
377 Renderer.symbol(feature, Beacons.LightMajor, null, null, null);
378 break;
379 case LITMIN:
380 case LIGHTS:
381 Renderer.symbol(feature, Beacons.LightMinor, null, null, null);
382 break;
383 }
384 }
385 private static void locks(Feature feature) {
386/*object_rules(locks) {
387 if ((zoom>=13) && is_type("lock_basin|lock_basin_part")) symbol("lock");
388 if ((zoom>=15) && is_type("gate")) symbol("lock_gate");
389}
390*/
391 }
392 private static void marinas(Feature feature) {
393 if (zoom >= 16) {
394
395 }
396/* int n = countObjects(item, type);
397 Atta_t atta = enumAttribute("category", obja);
398 char **map = cluster_map(obja);
399 if (map == NULL) return;
400 switch (n) {
401 case 0: {
402 Obj_t *obj = getObj(item, obja, 0);
403 int n = countValues(getAtt(obj, atta));
404 switch (n) {
405 case 1:
406 renderSymbol(item, obja, map[getAttEnum(obj, atta, 0)], "", "", CC, 0, 0, 0);
407 break;
408 case 2:
409 renderSymbol(item, obja, map[getAttEnum(obj, atta, 0)], "", "", RC, 0, 0, 0);
410 renderSymbol(item, obja, map[getAttEnum(obj, atta, 1)], "", "", LC, 0, 0, 0);
411 break;
412 case 3:
413 renderSymbol(item, obja, map[getAttEnum(obj, atta, 0)], "", "", BC, 0, 0, 0);
414 renderSymbol(item, obja, map[getAttEnum(obj, atta, 1)], "", "", TR, 0, 0, 0);
415 renderSymbol(item, obja, map[getAttEnum(obj, atta, 2)], "", "", TL, 0, 0, 0);
416 break;
417 case 4:
418 renderSymbol(item, obja, map[getAttEnum(obj, atta, 0)], "", "", BR, 0, 0, 0);
419 renderSymbol(item, obja, map[getAttEnum(obj, atta, 1)], "", "", BL, 0, 0, 0);
420 renderSymbol(item, obja, map[getAttEnum(obj, atta, 2)], "", "", TR, 0, 0, 0);
421 renderSymbol(item, obja, map[getAttEnum(obj, atta, 3)], "", "", TL, 0, 0, 0);
422 break;
423 }
424 }
425 break;
426 case 1:
427 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 1), atta, 0)], "", "", CC, 0, 0, 0);
428 break;
429 case 2:
430 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 1), atta, 0)], "", "", RC, 0, 0, 0);
431 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 2), atta, 0)], "", "", LC, 0, 0, 0);
432 break;
433 case 3:
434 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 1), atta, 0)], "", "", BC, 0, 0, 0);
435 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 2), atta, 0)], "", "", TR, 0, 0, 0);
436 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 3), atta, 0)], "", "", TL, 0, 0, 0);
437 break;
438 case 4:
439 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 1), atta, 0)], "", "", BR, 0, 0, 0);
440 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 2), atta, 0)], "", "", BL, 0, 0, 0);
441 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 3), atta, 0)], "", "", TR, 0, 0, 0);
442 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 4), atta, 0)], "", "", TL, 0, 0, 0);
443 break;
444 }
445*/
446 }
447 private static void moorings(Feature feature) {
448 CatMOR cat = (CatMOR) Renderer.getAttVal(feature, feature.type, 0, Att.CATMOR);
449 switch (cat) {
450 case MOR_DLPN:
451 Renderer.symbol(feature, Harbours.Dolphin, null, null, null);
452 break;
453 case MOR_DDPN:
454 Renderer.symbol(feature, Harbours.DeviationDolphin, null, null, null);
455 break;
456 case MOR_BLRD:
457 case MOR_POST:
458 Renderer.symbol(feature, Harbours.Bollard, null, null, null);
459 break;
460 case MOR_BUOY:
461 BoySHP shape = (BoySHP) Renderer.getAttVal(feature, feature.type, 0, Att.BOYSHP);
462 if (shape == BoySHP.BOY_UNKN)
463 shape = BoySHP.BOY_SPHR;
464 Renderer.symbol(feature, Buoys.Shapes.get(shape), feature.type, null, null);
465 break;
466 }
467/* if (has_object("fog_signal")) object(fogs);
468 if (has_object("radar_transponder")) object(rtbs);
469 if (has_object("light")) object(lights);
470}
471*/
472 }
473
474 private static void notices(Feature feature) {
475 if (zoom >= 14) {
476 double dx = 0.0, dy = 0.0;
477 switch (feature.type) {
478 case BCNCAR:
479 case BCNISD:
480 case BCNLAT:
481 case BCNSAW:
482 case BCNSPP:
483 case BCNWTW:
484 dy = 45.0;
485 break;
486 case NOTMRK:
487 dy = 0.0;
488 break;
489 default:
490 return;
491 }
492 Symbol s1 = null, s2 = null;
493 MarSYS sys = MarSYS.SYS_CEVN;
494 BnkWTW bnk = BnkWTW.BWW_UNKN;
495 AttItem att = feature.atts.get(Att.MARSYS);
496 if (att != null) sys = (MarSYS)att.val;
497 ObjTab objs = feature.objs.get(Obj.NOTMRK);
498 int n = objs.size();
499 if (n > 2) {
500 s1 = Notices.Notice;
501 n = 1;
502 } else {
503 for (AttMap atts : objs.values()) {
504 if (atts.get(Att.MARSYS) != null) sys = (MarSYS)atts.get(Att.MARSYS).val;
505 CatNMK cat = CatNMK.NMK_UNKN;
506 if (atts.get(Att.CATNMK) != null) cat = (CatNMK)atts.get(Att.CATNMK).val;
507 s2 = Notices.getNotice(cat, sys);
508 }
509 }
510/* Obj_t *obj = getObj(item, NOTMRK, i);
511 if (obj == NULL) continue;
512 Atta_t add;
513 int idx = 0;
514 while ((add = getAttEnum(obj, ADDMRK, idx++)) != MRK_UNKN) {
515 if ((add == MRK_LTRI) && (i == 2)) swap = true;
516 if ((add == MRK_RTRI) && (i != 2)) swap = true;
517 }
518 }
519 } else {
520
521 }
522 for (int i = 0; i <=2; i++) {
523 Obj_t *obj = getObj(item, NOTMRK, i);
524 if (obj == NULL) continue;
525 Atta_t category = getAttEnum(obj, CATNMK, i);
526 Atta_t add;
527 int idx = 0;
528 int top=0, bottom=0, left=0, right=0;
529 while ((add = getAttEnum(obj, ADDMRK, idx++)) != MRK_UNKN) {
530 switch (add) {
531 case MRK_TOPB:
532 top = add;
533 break;
534 case MRK_BOTB:
535 case MRK_BTRI:
536 bottom = add;
537 break;
538 case MRK_LTRI:
539 left = add;
540 break;
541 case MRK_RTRI:
542 right = add;
543 break;
544 default:
545 break;
546 }
547 }
548 double orient = getAtt(obj, ORIENT) != NULL ? getAtt(obj, ORIENT)->val.val.f : 0.0;
549 int system = getAtt(obj, MARSYS) != NULL ? getAtt(obj, MARSYS)->val.val.e : 0;
550 double flip = 0.0;
551 char *symb = "";
552 char *base = "";
553 char *colour = "black";
554 if ((system == SYS_BWR2) || (system == SYS_BNWR)) {
555 symb = bniwr_map[category];
556 switch (category) {
557 case NMK_NANK:
558 case NMK_LMHR:
559 case NMK_KTPM...NMK_RSPD:
560 {
561 int bank = getAtt(obj, BNKWTW) != NULL ? getAtt(obj, BNKWTW)->val.val.e : 0;
562 switch (bank) {
563 case BWW_LEFT:
564 base = "notice_blb";
565 colour = "red";
566 break;
567 case BWW_RGHT:
568 base = "notice_brb";
569 colour = "green";
570 break;
571 default:
572 base = "notice_bsi";
573 colour = "black";
574 break;
575 }
576 }
577 default:
578 break;
579 }
580 } else if (system == SYS_PPWB) {
581 int bank = getAtt(obj, BNKWTW) != NULL ? getAtt(obj, BNKWTW)->val.val.e : 0;
582 if (bank != 0) {
583 switch (category) {
584 case NMK_WLAR:
585 if (bank == BNK_LEFT)
586 base = "notice_pwlarl";
587 else
588 base = "notice_pwlarr";
589 break;
590 case NMK_WRAL:
591 if (bank == BNK_LEFT)
592 base = "notice_pwrall";
593 else
594 base = "notice_pwralr";
595 break;
596 case NMK_KTPM:
597 if (bank == BNK_LEFT)
598 base = "notice_ppml";
599 else
600 base = "notice_ppmr";
601 break;
602 case NMK_KTSM:
603 if (bank == BNK_LEFT)
604 base = "notice_psml";
605 else
606 base = "notice_psmr";
607 break;
608 case NMK_KTMR:
609 if (bank == BNK_LEFT)
610 base = "notice_pmrl";
611 else
612 base = "notice_pmrr";
613 break;
614 case NMK_CRTP:
615 if (bank == BNK_LEFT)
616 base = "notice_pcpl";
617 else
618 base = "notice_pcpr";
619 break;
620 case NMK_CRTS:
621 if (bank == BNK_LEFT)
622 base = "notice_pcsl";
623 else
624 base = "notice_pcsr";
625 break;
626 default:
627 break;
628 }
629 }
630 } else {
631 symb = notice_map[category];
632 switch (category) {
633 case NMK_NOVK...NMK_NWSH:
634 case NMK_NMTC...NMK_NLBG:
635 base = "notice_a";
636 break;
637 case NMK_MVTL...NMK_CHDR:
638 base = "notice_b";
639 break;
640 case NMK_PRTL...NMK_PRTR:
641 case NMK_OVHC...NMK_LBGP:
642 base = "notice_e";
643 colour = "white";
644 break;
645 default:
646 break;
647 }
648 switch (category) {
649 case NMK_MVTL:
650 case NMK_ANKP:
651 case NMK_PRTL:
652 case NMK_MWAL:
653 case NMK_MWAR:
654 flip = 180.0;
655 break;
656 case NMK_SWWR:
657 case NMK_WRSL:
658 case NMK_WARL:
659 flip = -90.0;
660 break;
661 case NMK_SWWC:
662 case NMK_SWWL:
663 case NMK_WLSR:
664 case NMK_WALR:
665 flip = 90.0;
666 break;
667 default:
668 break;
669 }
670 }
671 if (n == 2) {
672 dx = (((i != 2) && swap) || ((i == 2) && !swap)) ? -30.0 : 30.0;
673 }
674 if (top == MRK_TOPB)
675 renderSymbol(item, NOTMRK, "notice_board", "", "", BC, dx, dy, orient);
676 if (bottom == MRK_BOTB)
677 renderSymbol(item, NOTMRK, "notice_board", "", "", BC, dx, dy, orient+180);
678 if (bottom == MRK_BTRI)
679 renderSymbol(item, NOTMRK, "notice_triangle", "", "", BC, dx, dy, orient+180);
680 if (left == MRK_LTRI)
681 renderSymbol(item, NOTMRK, "notice_triangle", "", "", BC, dx, dy, orient-90);
682 if (right == MRK_RTRI)
683 renderSymbol(item, NOTMRK, "notice_triangle", "", "", BC, dx, dy, orient+90);
684 renderSymbol(item, NOTMRK, base, "", "", CC, dx, dy, orient);
685 renderSymbol(item, NOTMRK, symb, "", colour, CC, dx, dy, orient+flip);
686 }
687*/
688 }
689 }
690 private static void obstructions(Feature feature) {
691 if ((zoom >= 14) && (feature.type == Obj.UWTROC)) {
692 WatLEV lvl = (WatLEV) Renderer.getAttVal(feature, feature.type, 0, Att.WATLEV);
693 switch (lvl) {
694 case LEV_CVRS:
695 Renderer.symbol(feature, Areas.RockC, null, null, null);
696 break;
697 case LEV_AWSH:
698 Renderer.symbol(feature, Areas.RockA, null, null, null);
699 break;
700 default:
701 Renderer.symbol(feature, Areas.Rock, null, null, null);
702 }
703 } else {
704 Renderer.symbol(feature, Areas.Rock, null, null, null);
705 }
706 }
707 private static void pipelines(Feature feature) {
708 if (zoom >= 14) {
709 if (feature.type == Obj.PIPSOL) {
710 Renderer.lineSymbols(feature, Areas.Pipeline, 1.0, null, 0, new Color(0x80c480));
711 } else if (feature.type == Obj.PIPOHD) {
712
713 }
714 }
715 }
716 private static void platforms(Feature feature) {
717 ArrayList<CatOFP> cats = (ArrayList<CatOFP>)Renderer.getAttVal(feature, Obj.OFSPLF, 0, Att.CATOFP);
718 if ((CatOFP) cats.get(0) == CatOFP.OFP_FPSO)
719 Renderer.symbol(feature, Buoys.Storage, null, null, null);
720 else
721 Renderer.symbol(feature, Landmarks.Platform, null, null, null);
722 AttItem name = feature.atts.get(Att.OBJNAM);
723 if ((zoom >= 15) && (name != null))
724 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(60, -50)));
725/*object_rules(platforms) {
726 if (has_object("fog_signal")) object(fogs);
727 if (has_object("radar_transponder")) object(rtbs);
728 if (has_object("light")) object(lights);
729}
730*/
731 }
732 private static void ports(Feature feature) {
733 if (zoom >= 14) {
734 if (feature.type == Obj.CRANES) {
735 if ((CatCRN) Renderer.getAttVal(feature, feature.type, 0, Att.CATCRN) == CatCRN.CRN_CONT)
736 Renderer.symbol(feature, Harbours.ContainerCrane, null, null, null);
737 else
738 Renderer.symbol(feature, Harbours.PortCrane, null, null, null);
739 } else if (feature.type == Obj.HULKES) {
740 Renderer.lineVector(feature, new LineStyle(Color.black, 4, null, new Color(0xffe000)));
741 AttItem name = feature.atts.get(Att.OBJNAM);
742 if ((zoom >= 15) && (name != null))
743 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), Color.black, null);
744 }
745 }
746 }
747 private static void separation(Feature feature) {
748 switch (feature.type) {
749 case TSEZNE:
750 case TSSCRS:
751 case TSSRON:
752 if (zoom <= 15)
753 Renderer.lineVector(feature, new LineStyle(null, 0, null, new Color(0x80c48080, true)));
754 else
755 Renderer.lineVector(feature, new LineStyle(new Color(0x80c48080, true), 20, null, null));
756 AttItem name = feature.atts.get(Att.OBJNAM);
757 if ((zoom >= 10) && (name != null))
758 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 150), new Color(0x80c48080), null);
759 break;
760 case TSELNE:
761 Renderer.lineVector(feature, new LineStyle(new Color(0x80c48080, true), 20, null, null));
762 break;
763 case TSSLPT:
764 Renderer.lineSymbols(feature, Areas.LaneArrow, 0.5, null, 0, new Color(0x80c48080, true));
765 break;
766 case TSSBND:
767 Renderer.lineVector(feature, new LineStyle(new Color(0x80c48080, true), 20, new float[] { 40, 40 }, null));
768 break;
769 case ISTZNE:
770 Renderer.lineSymbols(feature, Areas.Restricted, 1.0, null, 0, new Color(0x80c48080, true));
771 break;
772 }
773 }
774 private static void shoreline(Feature feature) {
775 if (zoom >= 12) {
776 switch ((CatSLC) Renderer.getAttVal(feature, feature.type, 0, Att.CATSLC)) {
777 case SLC_TWAL:
778 WatLEV lev = (WatLEV) Renderer.getAttVal(feature, feature.type, 0, Att.WATLEV);
779 if (lev == WatLEV.LEV_CVRS) {
780 Renderer.lineVector(feature, new LineStyle(Color.black, 10, new float[] { 40, 40 }, null));
781 if (zoom >= 15)
782 Renderer.lineText(feature, "(covers)", new Font("Arial", Font.PLAIN, 80), Color.black, 0.5, 20);
783 } else {
784 Renderer.lineVector(feature, new LineStyle(Color.black, 10, null, null));
785 }
786 if (zoom >= 15)
787 Renderer.lineText(feature, "Training Wall", new Font("Arial", Font.PLAIN, 80), Color.black, 0.5, -20);
788 }
789 }
790 }
791 private static void signals(Feature feature) {
792 if (zoom >= 14) {
793 switch (feature.type) {
794 case SISTAT:
795 case SISTAW:
796 Renderer.symbol(feature, Harbours.SignalStation, null, null, null);
797 break;
798 case RDOSTA:
799 Renderer.symbol(feature, Harbours.SignalStation, null, null, null);
800 Renderer.symbol(feature, Beacons.RadarStation, null, null, null);
801 ArrayList<CatROS> cats = (ArrayList<CatROS>)Renderer.getAttVal(feature, Obj.RDOSTA, 0, Att.CATROS);
802 String str = "";
803 for (CatROS ros : cats) {
804 switch (ros) {
805 case ROS_OMNI:
806 str += " RC";
807 break;
808 case ROS_DIRL:
809 str += " RD";
810 break;
811 case ROS_ROTP:
812 str += " RW";
813 break;
814 case ROS_CNSL:
815 str += " Consol";
816 break;
817 case ROS_RDF:
818 str += " RG";
819 break;
820 case ROS_QTA:
821 str += " R";
822 break;
823 case ROS_AERO:
824 str += " AeroRC";
825 break;
826 case ROS_DECA:
827 str += " Decca";
828 break;
829 case ROS_LORN:
830 str += " Loran";
831 break;
832 case ROS_DGPS:
833 str += " DGPS";
834 break;
835 case ROS_TORN:
836 str += " Toran";
837 break;
838 case ROS_OMGA:
839 str += " Omega";
840 break;
841 case ROS_SYLD:
842 str += " Syledis";
843 break;
844 case ROS_CHKA:
845 str += " Chiaka";
846 break;
847 case ROS_PCOM:
848 case ROS_COMB:
849 case ROS_FACS:
850 case ROS_TIME:
851 break;
852 case ROS_PAIS:
853 case ROS_SAIS:
854 str += " AIS";
855 break;
856 case ROS_VAIS:
857 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
858 break;
859 case ROS_VANC:
860 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
861 Renderer.symbol(feature, Topmarks.TopNorth, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
862 break;
863 case ROS_VASC:
864 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
865 Renderer.symbol(feature, Topmarks.TopSouth, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
866 break;
867 case ROS_VAEC:
868 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
869 Renderer.symbol(feature, Topmarks.TopEast, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
870 break;
871 case ROS_VAWC:
872 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
873 Renderer.symbol(feature, Topmarks.TopWest, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
874 break;
875 case ROS_VAPL:
876 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
877 Renderer.symbol(feature, Topmarks.TopCan, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
878 break;
879 case ROS_VASL:
880 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
881 Renderer.symbol(feature, Topmarks.TopCone, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
882 break;
883 case ROS_VAID:
884 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
885 Renderer.symbol(feature, Topmarks.TopIsol, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
886 break;
887 case ROS_VASW:
888 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
889 Renderer.symbol(feature, Topmarks.TopSphere, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
890 break;
891 case ROS_VASP:
892 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
893 Renderer.symbol(feature, Topmarks.TopX, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
894 break;
895 case ROS_VAWK:
896 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
897 Renderer.symbol(feature, Topmarks.TopCross, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
898 break;
899 }
900 }
901 if (!str.isEmpty()) Renderer.labelText(feature, str, new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BR, AffineTransform.getTranslateInstance(-30, -180)));
902 break;
903 case RADSTA:
904 Renderer.symbol(feature, Harbours.SignalStation, null, null, null);
905 Renderer.symbol(feature, Beacons.RadarStation, null, null, null);
906 break;
907 case PILBOP:
908 Renderer.symbol(feature, Harbours.Pilot, null, null, null);
909 break;
910 case CGUSTA:
911 Renderer.symbol(feature, Harbours.SignalStation, null, null, null);
912 break;
913 case RSCSTA:
914 Renderer.symbol(feature, Harbours.Rescue, null, null, null);
915 break;
916 }
917 }
918 /* if (has_object("fog_signal")) object(fogs);
919 if (has_object("radar_transponder")) object(rtbs);
920 if (has_object("light")) object(lights);
921}
922*/
923 }
924 private static void transits(Feature feature) {
925 if (zoom >= 12) {
926 if (feature.type == Obj.RECTRC) Renderer.lineVector (feature, new LineStyle(Color.black, 10, null, null));
927 else if (feature.type == Obj.NAVLNE) Renderer.lineVector (feature, new LineStyle(Color.black, 10, new float[] { 25, 25 }, null));
928 }
929 if (zoom >= 15) {
930 String str = "";
931 AttItem name = feature.atts.get(Att.OBJNAM);
932 if (name != null) str += (String)name.val + " ";
933 Double ort = (Double) Renderer.getAttVal(feature, feature.type, 0, Att.ORIENT);
934 if (ort != null) str += ort.toString() + "\u0152";
935 if (!str.isEmpty()) Renderer.lineText(feature, str, new Font("Arial", Font.PLAIN, 80), Color.black, 0.5, -20);
936 }
937 }
938 private static void waterways(Feature feature) {
939 }
940 private static void wrecks(Feature feature) {
941 if (zoom >= 14) {
942 CatWRK cat = (CatWRK) Renderer.getAttVal(feature, feature.type, 0, Att.CATWRK);
943 switch (cat) {
944 case WRK_DNGR:
945 case WRK_MSTS:
946 Renderer.symbol(feature, Areas.WreckD, null, null, null);
947 break;
948 case WRK_HULS:
949 Renderer.symbol(feature, Areas.WreckS, null, null, null);
950 break;
951 default:
952 Renderer.symbol(feature, Areas.WreckND, null, null, null);
953 }
954 }
955 }
956}
Note: See TracBrowser for help on using the repository browser.