Я рисую поверхность в кубометре с помощью TwoDMode = true, когда я пытаюсь масштабировать, используя левое перетаскивание мышью, прямоугольник выбора выбора выходит за поверхность, поэтому он не отображается должным образом. Можно ли заставить прямоугольник выбора располагаться поверх поверхности? Более того, возможно ли это наведение или щелчок мышью на поверхности, значения X, Y и Z будут показаны в некоторых текстовых окнах? Большое спасибо.ILNumerics масштабирует прямоугольник выбора и получает доступ к построенным данным в ILPlotcube
ответ
Поверхности являются по своей сути трехмерными объектами. По умолчанию они предназначены для использования с ILPlotCube.TwoDMode
, установленным на false
. Но вы можете попытаться получить доступ к объекту прямоугольника выделения и соответствующим образом изменить его. Попробуйте начать с plotCube.ZoomRectangle.Lines.Positions
, подняв его координату Z, чтобы переместить ее ближе к камере.
Архивирование точки поверхности под курсором непросто - но выполнимо. Имейте в виду, что только вершины поверхностных плиток известны явно. Вы можете использовать комплектование и события мыши, чтобы получить информацию, если мышь находится над поверхностью:
surface.MouseMove += (_s,_a) => { yourHandler(_a); }
После этого, вы можете самостоятельно. Во-первых, вам нужно будет найти фактические 3D-координаты поверхности. Если вы можете быть уверены, что поверхность не повернута, вы можете посмотреть here.
Метод в этой резьбе дает координаты поверхности X и Y. Вы можете пойти дальше и (вручную) найти соответствующую плитку для этой позиции. Для окончательных и точных координат X, Y, Z вам нужно будет интерполировать вершины черепицы (треугольника) в фактическую позицию мыши, используя barycentric interpolation.
Чтобы показать 3D-координату, вы можете просто использовать ILLabel
. Вы можете или не хотите ставить это в ILScreenObject
.
Спасибо за ответ. Не могли бы вы дать мне пример о том, как изменить Z-координату plotCube.ZoomRectangle.Lines.Positions на новое значение, например, 100? – Ehsan
Попробуйте: zoomrectangle.Translate (0,0,100); –
Возможно, это был способ новичков, но я использовал этот подход и работал: ILArray
Почему вы используете 2D-режим с поверхностью? –