Page 1 of 1

GetDrawingCoords

Posted: 11 May 2019, 23:17
by y.kuklin
Как получить X, Y массив координат Z поверхности объекта импортированного из STL файла?
У меня функция GetDrawingCoords работает корректно только при перемещении мыши. Программное задание координат X, Y приводит к ошибочному результату. К примеру это происходит в демо программе 3D если в NavigatorMouseMove зафиксировать значения X и Y.

Re: GetDrawingCoords

Posted: 13 May 2019, 18:37
by support
Здравствуйте,

Не могли бы Вы привести пример кода, показывающий, какие значения X и Y Вы задаете внутри процедуры Tfm3DGLS.NavigatorMouseMove и передаете в функцию GetDrawingCoords?

Михаил

Re: GetDrawingCoords

Posted: 15 May 2019, 14:25
by y.kuklin
Пример кода и STL файл в архиве.
Значения X, Y в NavigatorMouseMove отличаются от положения курсора на 1. Ошибка в GetDrawingCoords.
В NavigatorBitmapData (OnClick event) значения X, Y соответствуют положению курсора. Функция GetDrawingCoords возвращает правильные значения.
Задача программы состоит в том, чтобы при нажатии кнопки "Map" создавалась цветная карта поверхности.

Re: GetDrawingCoords

Posted: 20 May 2019, 23:35
by support
Здравствуйте,

Спасибо за файлы.

Не могли бы Вы также прислать файлы проекта (.cbproj, .cpp) и уточнить, в какой версии RAD Studio работаете?

Update: файлы проекта присылать необязательно, мы смогли собрать и запустить Ваше приложение в RAD Studio XE3.

Михаил

Re: GetDrawingCoords

Posted: 21 May 2019, 20:10
by support
y.kuklin wrote:
15 May 2019, 14:25
Значения X, Y в NavigatorMouseMove отличаются от положения курсора на 1. Ошибка в GetDrawingCoords.
В NavigatorBitmapData (OnClick event) значения X, Y соответствуют положению курсора. Функция GetDrawingCoords возвращает правильные значения.
Это объясняется тем, что в функции Tsg3DDrawingNavigator.CoordinateConvertion, которая используется для расчета координат при вызове Tsg3DDrawingNavigator.GetDrawingCoords (GetDrawingCoords -> GetDrawingInternalCoords -> CoordinateConvertion), есть проверка на соответствие положения курсора мыши значениям, переданным через аргументы ACoordX, ACoordY:

Code: Select all

function Tsg3DDrawingNavigator.CoordinateConvertion(ACoordX, ACoordY: Integer;
  var APointInUCS: TFPoint): TFPoint;
begin
  if (ACoordX = FMove.Pos.X) and (ACoordY = FMove.Pos.Y) and Assigned(FIntersectCache) then
  begin
    Result := SubFPoint(FIntersectCache^, FBoxOffs);
    APointInUCS := Result;
  end
  else
    Result := GetRealPoint(ACoordX, ACoordY, APointInUCS);
end;
Если получится найти альтернативное решение поставленной задачи, мы напишем об этом.

Михаил