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

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

save

File size: 41.6 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, 60), new Color(0xc480ff), new Delta(Handle.LC, AffineTransform.getTranslateInstance(70, 0)));
321 }
322 ArrayList<StsSTS> sts = (ArrayList<StsSTS>)Renderer.getAttVal(feature, Obj.ACHARE, 0, Att.STATUS);
323 if ((zoom >= 15) && (sts != null) && (sts.contains(StsSTS.STS_RESV))) {
324 Renderer.labelText(feature, "Reserved", new Font("Arial", Font.BOLD, 50), new Color(0xc480ff), new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 60)));
325 }
326 }
327 ArrayList<CatACH> cats = (ArrayList<CatACH>)Renderer.getAttVal(feature, Obj.ACHARE, 0, Att.CATACH);
328 int dy = (cats.size() - 1) * -30;
329 for (CatACH cat : cats) {
330 switch (cat) {
331 case ACH_DEEP:
332 Renderer.labelText(feature, "DW", new Font("Arial", Font.BOLD, 50), new Color(0xc480ff), new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
333 dy += 60;
334 break;
335 case ACH_TANK:
336 Renderer.labelText(feature, "Tanker", new Font("Arial", Font.BOLD, 50), new Color(0xc480ff), new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
337 dy += 60;
338 break;
339 case ACH_H24P:
340 Renderer.labelText(feature, "24h", new Font("Arial", Font.BOLD, 50), new Color(0xc480ff), new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
341 dy += 60;
342 break;
343 case ACH_EXPL:
344 Renderer.symbol(feature, Harbours.Explosives, null, new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)), new Scheme(new Color(0xc480ff)));
345 dy += 60;
346 break;
347 case ACH_QUAR:
348 Renderer.symbol(feature, Harbours.Hospital, null, new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)), new Scheme(new Color(0xc480ff)));
349 dy += 60;
350 break;
351 case ACH_SEAP:
352 Renderer.symbol(feature, Areas.Seaplane, null, new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)), new Scheme(new Color(0xc480ff)));
353 dy += 60;
354 break;
355 }
356 }
357 break;
358 }
359 }
360/*
361 if ((zoom >= 16) && is_type("anchor_berth")) symbol("anchor_berth");
362 if ((zoom >= 12) && is_type("harbour")) {
363 if (has_attribute("category")) {
364 attribute_switch("category")
365 attribute_case("marina|yacht") symbol("marina");
366 attribute_case("marina_no_facilities") symbol("marina_nf");
367 attribute_default symbol("harbour");
368 end_switch
369 } else symbol("harbour");
370 if ((zoom >= 15) && (has_item_attribute("name")))
371 text(item_attribute("name"), "font-family:Arial; font-weight:bold; font-size:80; text-anchor:middle", 0, -90);
372 }
373*/
374 private static void landmarks(Feature feature) {
375 ArrayList<CatLMK> cats = (ArrayList<CatLMK>) Renderer.getAttVal(feature, feature.type, 0, Att.CATLMK);
376 Symbol catSym = Landmarks.Shapes.get(cats.get(0));
377 ArrayList<FncFNC> fncs = (ArrayList<FncFNC>) Renderer.getAttVal(feature, feature.type, 0, Att.FUNCTN);
378 Symbol fncSym = Landmarks.Funcs.get(fncs.get(0));
379 if ((fncs.get(0) == FncFNC.FNC_CHCH) && (cats.get(0) == CatLMK.LMK_TOWR))
380 catSym = Landmarks.ChurchTower;
381 if ((cats.get(0) == CatLMK.LMK_UNKN) && (fncs.get(0) == FncFNC.FNC_UNKN) && (feature.objs.get(Obj.LIGHTS) != null))
382 catSym = Beacons.LightMajor;
383 if (cats.get(0) == CatLMK.LMK_RADR)
384 fncSym = Landmarks.RadioTV;
385 Renderer.symbol(feature, catSym, null, null, null);
386 Renderer.symbol(feature, fncSym, null, null, null);
387/* if (!has_attribute("function") && !has_attribute("category") && has_object("light")) {
388 symbol("lighthouse");
389 if ((zoom >= 15) && has_item_attribute("name"))
390 text(item_attribute("name"), "font-family:Arial; font-weight:bold; font-size:80; text-anchor:middle", 0, -70);
391 } else {
392 if ((zoom >= 15) && has_item_attribute("name"))
393 text(item_attribute("name"), "font-family:Arial; font-weight:bold; font-size:80; text-anchor:start", 60, -50);
394 }
395 if (has_object("fog_signal")) object(fogs);
396 if (has_object("radar_transponder")) object(rtbs);
397 if (has_object("radar_station") && (zoom >= 12)) symbol("radar_station");
398 if (has_object("light")) object(lights);
399}
400*/
401 }
402 private static void lights(Feature feature) {
403 switch (feature.type) {
404 case LITMAJ:
405 Renderer.symbol(feature, Beacons.LightMajor, null, null, null);
406 break;
407 case LITMIN:
408 case LIGHTS:
409 Renderer.symbol(feature, Beacons.LightMinor, null, null, null);
410 break;
411 }
412 }
413 private static void locks(Feature feature) {
414/*object_rules(locks) {
415 if ((zoom>=13) && is_type("lock_basin|lock_basin_part")) symbol("lock");
416 if ((zoom>=15) && is_type("gate")) symbol("lock_gate");
417}
418*/
419 }
420 private static void marinas(Feature feature) {
421 if (zoom >= 16) {
422
423 }
424/* int n = countObjects(item, type);
425 Atta_t atta = enumAttribute("category", obja);
426 char **map = cluster_map(obja);
427 if (map == NULL) return;
428 switch (n) {
429 case 0: {
430 Obj_t *obj = getObj(item, obja, 0);
431 int n = countValues(getAtt(obj, atta));
432 switch (n) {
433 case 1:
434 renderSymbol(item, obja, map[getAttEnum(obj, atta, 0)], "", "", CC, 0, 0, 0);
435 break;
436 case 2:
437 renderSymbol(item, obja, map[getAttEnum(obj, atta, 0)], "", "", RC, 0, 0, 0);
438 renderSymbol(item, obja, map[getAttEnum(obj, atta, 1)], "", "", LC, 0, 0, 0);
439 break;
440 case 3:
441 renderSymbol(item, obja, map[getAttEnum(obj, atta, 0)], "", "", BC, 0, 0, 0);
442 renderSymbol(item, obja, map[getAttEnum(obj, atta, 1)], "", "", TR, 0, 0, 0);
443 renderSymbol(item, obja, map[getAttEnum(obj, atta, 2)], "", "", TL, 0, 0, 0);
444 break;
445 case 4:
446 renderSymbol(item, obja, map[getAttEnum(obj, atta, 0)], "", "", BR, 0, 0, 0);
447 renderSymbol(item, obja, map[getAttEnum(obj, atta, 1)], "", "", BL, 0, 0, 0);
448 renderSymbol(item, obja, map[getAttEnum(obj, atta, 2)], "", "", TR, 0, 0, 0);
449 renderSymbol(item, obja, map[getAttEnum(obj, atta, 3)], "", "", TL, 0, 0, 0);
450 break;
451 }
452 }
453 break;
454 case 1:
455 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 1), atta, 0)], "", "", CC, 0, 0, 0);
456 break;
457 case 2:
458 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 1), atta, 0)], "", "", RC, 0, 0, 0);
459 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 2), atta, 0)], "", "", LC, 0, 0, 0);
460 break;
461 case 3:
462 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 1), atta, 0)], "", "", BC, 0, 0, 0);
463 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 2), atta, 0)], "", "", TR, 0, 0, 0);
464 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 3), atta, 0)], "", "", TL, 0, 0, 0);
465 break;
466 case 4:
467 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 1), atta, 0)], "", "", BR, 0, 0, 0);
468 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 2), atta, 0)], "", "", BL, 0, 0, 0);
469 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 3), atta, 0)], "", "", TR, 0, 0, 0);
470 renderSymbol(item, obja, map[getAttEnum(getObj(item, obja, 4), atta, 0)], "", "", TL, 0, 0, 0);
471 break;
472 }
473*/
474 }
475 private static void moorings(Feature feature) {
476 CatMOR cat = (CatMOR) Renderer.getAttVal(feature, feature.type, 0, Att.CATMOR);
477 switch (cat) {
478 case MOR_DLPN:
479 Renderer.symbol(feature, Harbours.Dolphin, null, null, null);
480 break;
481 case MOR_DDPN:
482 Renderer.symbol(feature, Harbours.DeviationDolphin, null, null, null);
483 break;
484 case MOR_BLRD:
485 case MOR_POST:
486 Renderer.symbol(feature, Harbours.Bollard, null, null, null);
487 break;
488 case MOR_BUOY:
489 BoySHP shape = (BoySHP) Renderer.getAttVal(feature, feature.type, 0, Att.BOYSHP);
490 if (shape == BoySHP.BOY_UNKN)
491 shape = BoySHP.BOY_SPHR;
492 Renderer.symbol(feature, Buoys.Shapes.get(shape), feature.type, null, null);
493 break;
494 }
495/* if (has_object("fog_signal")) object(fogs);
496 if (has_object("radar_transponder")) object(rtbs);
497 if (has_object("light")) object(lights);
498}
499*/
500 }
501
502 private static void notices(Feature feature) {
503 if (zoom >= 14) {
504 double dx = 0.0, dy = 0.0;
505 switch (feature.type) {
506 case BCNCAR:
507 case BCNISD:
508 case BCNLAT:
509 case BCNSAW:
510 case BCNSPP:
511 case BCNWTW:
512 dy = 45.0;
513 break;
514 case NOTMRK:
515 dy = 0.0;
516 break;
517 default:
518 return;
519 }
520 Symbol s1 = null, s2 = null;
521 MarSYS sys = MarSYS.SYS_CEVN;
522 BnkWTW bnk = BnkWTW.BWW_UNKN;
523 AttItem att = feature.atts.get(Att.MARSYS);
524 if (att != null) sys = (MarSYS)att.val;
525 ObjTab objs = feature.objs.get(Obj.NOTMRK);
526 int n = objs.size();
527 if (n > 2) {
528 s1 = Notices.Notice;
529 n = 1;
530 } else {
531 for (AttMap atts : objs.values()) {
532 if (atts.get(Att.MARSYS) != null) sys = (MarSYS)atts.get(Att.MARSYS).val;
533 CatNMK cat = CatNMK.NMK_UNKN;
534 if (atts.get(Att.CATNMK) != null) cat = (CatNMK)atts.get(Att.CATNMK).val;
535 s2 = Notices.getNotice(cat, sys);
536 }
537 }
538/* Obj_t *obj = getObj(item, NOTMRK, i);
539 if (obj == NULL) continue;
540 Atta_t add;
541 int idx = 0;
542 while ((add = getAttEnum(obj, ADDMRK, idx++)) != MRK_UNKN) {
543 if ((add == MRK_LTRI) && (i == 2)) swap = true;
544 if ((add == MRK_RTRI) && (i != 2)) swap = true;
545 }
546 }
547 } else {
548
549 }
550 for (int i = 0; i <=2; i++) {
551 Obj_t *obj = getObj(item, NOTMRK, i);
552 if (obj == NULL) continue;
553 Atta_t category = getAttEnum(obj, CATNMK, i);
554 Atta_t add;
555 int idx = 0;
556 int top=0, bottom=0, left=0, right=0;
557 while ((add = getAttEnum(obj, ADDMRK, idx++)) != MRK_UNKN) {
558 switch (add) {
559 case MRK_TOPB:
560 top = add;
561 break;
562 case MRK_BOTB:
563 case MRK_BTRI:
564 bottom = add;
565 break;
566 case MRK_LTRI:
567 left = add;
568 break;
569 case MRK_RTRI:
570 right = add;
571 break;
572 default:
573 break;
574 }
575 }
576 double orient = getAtt(obj, ORIENT) != NULL ? getAtt(obj, ORIENT)->val.val.f : 0.0;
577 int system = getAtt(obj, MARSYS) != NULL ? getAtt(obj, MARSYS)->val.val.e : 0;
578 double flip = 0.0;
579 char *symb = "";
580 char *base = "";
581 char *colour = "black";
582 if ((system == SYS_BWR2) || (system == SYS_BNWR)) {
583 symb = bniwr_map[category];
584 switch (category) {
585 case NMK_NANK:
586 case NMK_LMHR:
587 case NMK_KTPM...NMK_RSPD:
588 {
589 int bank = getAtt(obj, BNKWTW) != NULL ? getAtt(obj, BNKWTW)->val.val.e : 0;
590 switch (bank) {
591 case BWW_LEFT:
592 base = "notice_blb";
593 colour = "red";
594 break;
595 case BWW_RGHT:
596 base = "notice_brb";
597 colour = "green";
598 break;
599 default:
600 base = "notice_bsi";
601 colour = "black";
602 break;
603 }
604 }
605 default:
606 break;
607 }
608 } else if (system == SYS_PPWB) {
609 int bank = getAtt(obj, BNKWTW) != NULL ? getAtt(obj, BNKWTW)->val.val.e : 0;
610 if (bank != 0) {
611 switch (category) {
612 case NMK_WLAR:
613 if (bank == BNK_LEFT)
614 base = "notice_pwlarl";
615 else
616 base = "notice_pwlarr";
617 break;
618 case NMK_WRAL:
619 if (bank == BNK_LEFT)
620 base = "notice_pwrall";
621 else
622 base = "notice_pwralr";
623 break;
624 case NMK_KTPM:
625 if (bank == BNK_LEFT)
626 base = "notice_ppml";
627 else
628 base = "notice_ppmr";
629 break;
630 case NMK_KTSM:
631 if (bank == BNK_LEFT)
632 base = "notice_psml";
633 else
634 base = "notice_psmr";
635 break;
636 case NMK_KTMR:
637 if (bank == BNK_LEFT)
638 base = "notice_pmrl";
639 else
640 base = "notice_pmrr";
641 break;
642 case NMK_CRTP:
643 if (bank == BNK_LEFT)
644 base = "notice_pcpl";
645 else
646 base = "notice_pcpr";
647 break;
648 case NMK_CRTS:
649 if (bank == BNK_LEFT)
650 base = "notice_pcsl";
651 else
652 base = "notice_pcsr";
653 break;
654 default:
655 break;
656 }
657 }
658 } else {
659 symb = notice_map[category];
660 switch (category) {
661 case NMK_NOVK...NMK_NWSH:
662 case NMK_NMTC...NMK_NLBG:
663 base = "notice_a";
664 break;
665 case NMK_MVTL...NMK_CHDR:
666 base = "notice_b";
667 break;
668 case NMK_PRTL...NMK_PRTR:
669 case NMK_OVHC...NMK_LBGP:
670 base = "notice_e";
671 colour = "white";
672 break;
673 default:
674 break;
675 }
676 switch (category) {
677 case NMK_MVTL:
678 case NMK_ANKP:
679 case NMK_PRTL:
680 case NMK_MWAL:
681 case NMK_MWAR:
682 flip = 180.0;
683 break;
684 case NMK_SWWR:
685 case NMK_WRSL:
686 case NMK_WARL:
687 flip = -90.0;
688 break;
689 case NMK_SWWC:
690 case NMK_SWWL:
691 case NMK_WLSR:
692 case NMK_WALR:
693 flip = 90.0;
694 break;
695 default:
696 break;
697 }
698 }
699 if (n == 2) {
700 dx = (((i != 2) && swap) || ((i == 2) && !swap)) ? -30.0 : 30.0;
701 }
702 if (top == MRK_TOPB)
703 renderSymbol(item, NOTMRK, "notice_board", "", "", BC, dx, dy, orient);
704 if (bottom == MRK_BOTB)
705 renderSymbol(item, NOTMRK, "notice_board", "", "", BC, dx, dy, orient+180);
706 if (bottom == MRK_BTRI)
707 renderSymbol(item, NOTMRK, "notice_triangle", "", "", BC, dx, dy, orient+180);
708 if (left == MRK_LTRI)
709 renderSymbol(item, NOTMRK, "notice_triangle", "", "", BC, dx, dy, orient-90);
710 if (right == MRK_RTRI)
711 renderSymbol(item, NOTMRK, "notice_triangle", "", "", BC, dx, dy, orient+90);
712 renderSymbol(item, NOTMRK, base, "", "", CC, dx, dy, orient);
713 renderSymbol(item, NOTMRK, symb, "", colour, CC, dx, dy, orient+flip);
714 }
715*/
716 }
717 }
718 private static void obstructions(Feature feature) {
719 if ((zoom >= 14) && (feature.type == Obj.UWTROC)) {
720 WatLEV lvl = (WatLEV) Renderer.getAttVal(feature, feature.type, 0, Att.WATLEV);
721 switch (lvl) {
722 case LEV_CVRS:
723 Renderer.symbol(feature, Areas.RockC, null, null, null);
724 break;
725 case LEV_AWSH:
726 Renderer.symbol(feature, Areas.RockA, null, null, null);
727 break;
728 default:
729 Renderer.symbol(feature, Areas.Rock, null, null, null);
730 }
731 } else {
732 Renderer.symbol(feature, Areas.Rock, null, null, null);
733 }
734 }
735 private static void pipelines(Feature feature) {
736 if (zoom >= 14) {
737 if (feature.type == Obj.PIPSOL) {
738 Renderer.lineSymbols(feature, Areas.Pipeline, 1.0, null, 0, new Color(0x80c480));
739 } else if (feature.type == Obj.PIPOHD) {
740
741 }
742 }
743 }
744 private static void platforms(Feature feature) {
745 ArrayList<CatOFP> cats = (ArrayList<CatOFP>)Renderer.getAttVal(feature, Obj.OFSPLF, 0, Att.CATOFP);
746 if ((CatOFP) cats.get(0) == CatOFP.OFP_FPSO)
747 Renderer.symbol(feature, Buoys.Storage, null, null, null);
748 else
749 Renderer.symbol(feature, Landmarks.Platform, null, null, null);
750 AttItem name = feature.atts.get(Att.OBJNAM);
751 if ((zoom >= 15) && (name != null))
752 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(60, -50)));
753/*object_rules(platforms) {
754 if (has_object("fog_signal")) object(fogs);
755 if (has_object("radar_transponder")) object(rtbs);
756 if (has_object("light")) object(lights);
757}
758*/
759 }
760 private static void ports(Feature feature) {
761 if (zoom >= 14) {
762 if (feature.type == Obj.CRANES) {
763 if ((CatCRN) Renderer.getAttVal(feature, feature.type, 0, Att.CATCRN) == CatCRN.CRN_CONT)
764 Renderer.symbol(feature, Harbours.ContainerCrane, null, null, null);
765 else
766 Renderer.symbol(feature, Harbours.PortCrane, null, null, null);
767 } else if (feature.type == Obj.HULKES) {
768 Renderer.lineVector(feature, new LineStyle(Color.black, 4, null, new Color(0xffe000)));
769 AttItem name = feature.atts.get(Att.OBJNAM);
770 if ((zoom >= 15) && (name != null))
771 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), Color.black, null);
772 }
773 }
774 }
775 private static void separation(Feature feature) {
776 switch (feature.type) {
777 case TSEZNE:
778 case TSSCRS:
779 case TSSRON:
780 if (zoom <= 15)
781 Renderer.lineVector(feature, new LineStyle(null, 0, null, new Color(0x80c48080, true)));
782 else
783 Renderer.lineVector(feature, new LineStyle(new Color(0x80c48080, true), 20, null, null));
784 AttItem name = feature.atts.get(Att.OBJNAM);
785 if ((zoom >= 10) && (name != null))
786 Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 150), new Color(0x80c48080), null);
787 break;
788 case TSELNE:
789 Renderer.lineVector(feature, new LineStyle(new Color(0x80c48080, true), 20, null, null));
790 break;
791 case TSSLPT:
792 Renderer.lineSymbols(feature, Areas.LaneArrow, 0.5, null, 0, new Color(0x80c48080, true));
793 break;
794 case TSSBND:
795 Renderer.lineVector(feature, new LineStyle(new Color(0x80c48080, true), 20, new float[] { 40, 40 }, null));
796 break;
797 case ISTZNE:
798 Renderer.lineSymbols(feature, Areas.Restricted, 1.0, null, 0, new Color(0x80c48080, true));
799 break;
800 }
801 }
802 private static void shoreline(Feature feature) {
803 if (zoom >= 12) {
804 switch ((CatSLC) Renderer.getAttVal(feature, feature.type, 0, Att.CATSLC)) {
805 case SLC_TWAL:
806 WatLEV lev = (WatLEV) Renderer.getAttVal(feature, feature.type, 0, Att.WATLEV);
807 if (lev == WatLEV.LEV_CVRS) {
808 Renderer.lineVector(feature, new LineStyle(Color.black, 10, new float[] { 40, 40 }, null));
809 if (zoom >= 15)
810 Renderer.lineText(feature, "(covers)", new Font("Arial", Font.PLAIN, 80), Color.black, 0.5, 20);
811 } else {
812 Renderer.lineVector(feature, new LineStyle(Color.black, 10, null, null));
813 }
814 if (zoom >= 15)
815 Renderer.lineText(feature, "Training Wall", new Font("Arial", Font.PLAIN, 80), Color.black, 0.5, -20);
816 }
817 }
818 }
819 private static void signals(Feature feature) {
820 if (zoom >= 14) {
821 switch (feature.type) {
822 case SISTAT:
823 case SISTAW:
824 Renderer.symbol(feature, Harbours.SignalStation, null, null, null);
825 break;
826 case RDOSTA:
827 Renderer.symbol(feature, Harbours.SignalStation, null, null, null);
828 Renderer.symbol(feature, Beacons.RadarStation, null, null, null);
829 ArrayList<CatROS> cats = (ArrayList<CatROS>)Renderer.getAttVal(feature, Obj.RDOSTA, 0, Att.CATROS);
830 String str = "";
831 for (CatROS ros : cats) {
832 switch (ros) {
833 case ROS_OMNI:
834 str += " RC";
835 break;
836 case ROS_DIRL:
837 str += " RD";
838 break;
839 case ROS_ROTP:
840 str += " RW";
841 break;
842 case ROS_CNSL:
843 str += " Consol";
844 break;
845 case ROS_RDF:
846 str += " RG";
847 break;
848 case ROS_QTA:
849 str += " R";
850 break;
851 case ROS_AERO:
852 str += " AeroRC";
853 break;
854 case ROS_DECA:
855 str += " Decca";
856 break;
857 case ROS_LORN:
858 str += " Loran";
859 break;
860 case ROS_DGPS:
861 str += " DGPS";
862 break;
863 case ROS_TORN:
864 str += " Toran";
865 break;
866 case ROS_OMGA:
867 str += " Omega";
868 break;
869 case ROS_SYLD:
870 str += " Syledis";
871 break;
872 case ROS_CHKA:
873 str += " Chiaka";
874 break;
875 case ROS_PCOM:
876 case ROS_COMB:
877 case ROS_FACS:
878 case ROS_TIME:
879 break;
880 case ROS_PAIS:
881 case ROS_SAIS:
882 str += " AIS";
883 break;
884 case ROS_VAIS:
885 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
886 break;
887 case ROS_VANC:
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.TopNorth, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
890 break;
891 case ROS_VASC:
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.TopSouth, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
894 break;
895 case ROS_VAEC:
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.TopEast, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
898 break;
899 case ROS_VAWC:
900 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
901 Renderer.symbol(feature, Topmarks.TopWest, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
902 break;
903 case ROS_VAPL:
904 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
905 Renderer.symbol(feature, Topmarks.TopCan, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
906 break;
907 case ROS_VASL:
908 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
909 Renderer.symbol(feature, Topmarks.TopCone, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
910 break;
911 case ROS_VAID:
912 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
913 Renderer.symbol(feature, Topmarks.TopIsol, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
914 break;
915 case ROS_VASW:
916 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
917 Renderer.symbol(feature, Topmarks.TopSphere, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
918 break;
919 case ROS_VASP:
920 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
921 Renderer.symbol(feature, Topmarks.TopX, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
922 break;
923 case ROS_VAWK:
924 Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
925 Renderer.symbol(feature, Topmarks.TopCross, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
926 break;
927 }
928 }
929 if (!str.isEmpty()) Renderer.labelText(feature, str, new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BR, AffineTransform.getTranslateInstance(-30, -180)));
930 break;
931 case RADSTA:
932 Renderer.symbol(feature, Harbours.SignalStation, null, null, null);
933 Renderer.symbol(feature, Beacons.RadarStation, null, null, null);
934 break;
935 case PILBOP:
936 Renderer.symbol(feature, Harbours.Pilot, null, null, null);
937 break;
938 case CGUSTA:
939 Renderer.symbol(feature, Harbours.SignalStation, null, null, null);
940 break;
941 case RSCSTA:
942 Renderer.symbol(feature, Harbours.Rescue, null, null, null);
943 break;
944 }
945 }
946 /* if (has_object("fog_signal")) object(fogs);
947 if (has_object("radar_transponder")) object(rtbs);
948 if (has_object("light")) object(lights);
949}
950*/
951 }
952 private static void transits(Feature feature) {
953 if (zoom >= 12) {
954 if (feature.type == Obj.RECTRC) Renderer.lineVector (feature, new LineStyle(Color.black, 10, null, null));
955 else if (feature.type == Obj.NAVLNE) Renderer.lineVector (feature, new LineStyle(Color.black, 10, new float[] { 25, 25 }, null));
956 }
957 if (zoom >= 15) {
958 String str = "";
959 AttItem name = feature.atts.get(Att.OBJNAM);
960 if (name != null) str += (String)name.val + " ";
961 Double ort = (Double) Renderer.getAttVal(feature, feature.type, 0, Att.ORIENT);
962 if (ort != null) str += ort.toString() + "\u0152";
963 if (!str.isEmpty()) Renderer.lineText(feature, str, new Font("Arial", Font.PLAIN, 80), Color.black, 0.5, -20);
964 }
965 }
966 private static void waterways(Feature feature) {
967 }
968 private static void wrecks(Feature feature) {
969 if (zoom >= 14) {
970 CatWRK cat = (CatWRK) Renderer.getAttVal(feature, feature.type, 0, Att.CATWRK);
971 switch (cat) {
972 case WRK_DNGR:
973 case WRK_MSTS:
974 Renderer.symbol(feature, Areas.WreckD, null, null, null);
975 break;
976 case WRK_HULS:
977 Renderer.symbol(feature, Areas.WreckS, null, null, null);
978 break;
979 default:
980 Renderer.symbol(feature, Areas.WreckND, null, null, null);
981 }
982 }
983 }
984}
Note: See TracBrowser for help on using the repository browser.