Любой способ установить высоту фигуры

Я работаю на мировом ветре с эллипсом на поверхности, но я хочу установить высоту для этого эллипса.

Я пытаюсь использовать метод moveToили для создания экземпляра elevation непосредственно в конструкторе, но ничего не работает, и моя фигура все еще зафиксирована на планете.

Вот как я создаю свою форму:

final SurfaceEllipse shape = new SurfaceEllipse();
shape.setRadii(100000, 100000);
shape.moveTo(Position.fromDegrees(50.0, 0.0, 50*20000)); // just a test
layer.addRenderable(shape);

1 ответ

Решение

Положение действительно занимает возвышение, которое просто double и означает то же самое, что и высота (по крайней мере, в соответствии с Positionдобытчики).

Однако SurfaceEllipse реализует интерфейс SurfaceObject, который задокументирован как:

Общий интерфейс для визуализируемых объектов, отображаемых на поверхности земного шара, например SurfaceShape. SurfaceObject реализует интерфейсы Renderable и PreRenderable, поэтому объект Surface может быть агрегирован в любом слое или в некотором произвольном коде рендеринга.

Ключевые слова, на которые стоит обратить внимание: "нарисованные на поверхности земного шара". Вы не можете установить высоту. Это должно быть возвышение земной поверхности в этом положении. Таким образом, вы можете прочитать его, но не установить его.

Я бы предложил использовать другой класс, чтобы сделать вашу форму. Прыгайте вокруг структуры наследования классов, и вы можете найти что-то, что вам нужно.

AbstractGeneralShape документирует свою модель как:

Географическое положение этой фигуры. Высота относительно этого режима высоты формы.

Так что любой класс под AbstractGeneralShape имеет понятие высотных режимов.

AbstractShape также имеет altitudeMode и под ним - путь, класс, который, наконец, документирует высотный режим.

Путь документов высотного режима как:

Высоты в положениях трассы интерпретируются в соответствии с режимом высоты трассы. Если режим высоты - WorldWind.ABSOLUTE, высоты рассматриваются как высота над эллипсоидом. Если режим высоты - WorldWind.RELATIVE_TO_GROUND, высоты добавляются к отметке местности в этой позиции. Если режим высоты - WorldWind.CLAMP_TO_GROUND, высоты игнорируются.

Таким образом, чтобы делать то, что вы хотите, вы должны убедиться, что вы не в WorldWind.CLAMP_TO_GROUND высотный режим.

Имея это в виду, взгляните на эллипсоид.

Общий объем эллипсоида, определяемый центральным положением и тремя радиусами оси эллипсоида. Если A - радиус в направлении север-юг, а b - радиус в направлении восток-запад, а c - радиус в вертикальном направлении (увеличение высоты), то A == B == C определяет сферу, A == B > C определяет вертикально сплющенный сфероид (в форме диска), A == B

Это долгий путь сказать, что он построен так:

эллипсоид

Сделайте C достаточно маленьким, и это будет хорошо приближаться к двухмерному эллипсу.

Тем не менее, он все еще на самом деле трехмерный. Большая часть того, что я нашел, altitudeMode 3D, за исключением Path. Путь имеет некоторые интересные свойства местности.

Возможно, вы хотели, чтобы ваш эллипс был открыт внутри. В трех измерениях это называется тором. Они выглядят так:

эллиптический тор

К сожалению, я не могу найти эту форму в API WorldWind. Тем не менее, вы можете вытащить и создать свою собственную форму с нуля. http://goworldwind.org/developers-guide/how-to-build-a-custom-renderable/

Наиболее близким к этому в API является ExtrudedPolygon, который берет многоугольник и позволяет добавить высоту. Вам предстоит определить форму многоугольника. Экструдированные формы выглядят так:

экструдированный лист

И они всегда напоминают мне игру дох:

играть на заводе

Надеюсь, поможет.

Другие вопросы по тегам