Любой способ установить высоту фигуры
Я работаю на мировом ветре с эллипсом на поверхности, но я хочу установить высоту для этого эллипса.
Я пытаюсь использовать метод 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, который берет многоугольник и позволяет добавить высоту. Вам предстоит определить форму многоугольника. Экструдированные формы выглядят так:
И они всегда напоминают мне игру дох:
Надеюсь, поможет.