У меня есть WorldWindow
с разными RenderableLayer
на нем. Я хотел бы добавить CompassLayer
во время выполнения.
try {
String compassPath = "images" + File.separator + "CompassRoseWhite.png";
String compassImg = new ClassPathResource(compassPath).getURL().toString();
compass = new CompassLayer(compassImg);
worldWindow.getModel().getLayers().add(compass);
} catch (IOException e) { e.printStackTrace(); }
К сожалению, я не вижу компаса нигде на экране. Я пытался:
- установка положения компаса вручную с помощью
compass.setLocationCenter(...)
- добавление другого типа слоя (
IconLayer
сUserFacingIcon
), и это сработало нормально, указывая на то, что это не внутренняя проблема с тем, как я добавляю слои или что-то в этом роде. регистрация текущих слоев, чтобы убедиться, что они были добавлены, используя:
logger.debug("Cur layers = " + worldWindow.getModel().getLayers().toString());
Я вернулся:
Слои Cur = Stars, Atmosphere, Bing Imagery VASCustom, Scale bar, Compass, View Controls, Renderable, Renderable, Renderable, Renderable, Compass,
Как я могу эффективно устранить проблему с невидимым компасом? Спасибо!
Обновлять
Я упростил свой код, чтобы использовать существующий compassLayer
, и определил, что проблема заключается в том, что я использую setLocationCenter
, т. е.
compass = (CompassLayer) worldWindow.getModel().getLayers().getLayerByName("Compass");
// this works ...
// compass.setPosition(AVKey.SOUTHEAST);
// compass.setLocationOffset(new Vec4(0, 20));
// this does not work ...
compass.setLocationCenter(worldWindow.getView().getCenterPoint());
// this part works fine
String compassPath = "images" + File.separator + "CompassRoseWhite.png";
String compassImg = new ClassPathResource(compassPath).getURL().toString();
compass.setIconFilePath(compassImg);
compass.setEnabled(true);
Так что мне нужно определить, что именно не так с логикой setLocationCenter
.