Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Codegen
Зарегистрирован: 26.03.2006 Сообщения: 14 Откуда: Екатеринбург
|
Добавлено: Вс 26 Мар 2006 22:02 Заголовок сообщения: Как получить угол поворота карты? |
|
|
Делаю так:
function GetAngle(anIngeo: IIngeoApplication): double;
var
IngeoPaintSurface: IIngeoPaintSurface;
IngeoMatrixProjectionNavigator: IIngeoMatrixProjectionNavigator;
begin
IngeoPaintSurface := anIngeo.MainWindow.MapWindow.Surface;
IngeoMatrixProjectionNavigator := IngeoPaintSurface.Navigator as IIngeoMatrixProjectionNavigator;
result := IngeoMatrixProjectionNavigator.XAngle;
end;
В результате всегда получаю значение Pi/2, что я делаю не так и как все таки получить угол???
P.S.
Версия Ingeo 4.4.0.42, Сервер 4.3.0.16 |
|
Вернуться к началу |
|
 |
Рустам Тукаев Администратор сайта
Зарегистрирован: 14.02.2005 Сообщения: 30 Откуда: ИНТЕГРО
|
Добавлено: Ср 29 Мар 2006 12:29 Заголовок сообщения: Как получить угол поворота карты |
|
|
Это ошибка ИнГео
Для получения угла, используй MainWindow.MapWindow.Navigator
...
Result := MainWindow.MapWindow.Navigator.XAngle
... |
|
Вернуться к началу |
|
 |
Codegen
Зарегистрирован: 26.03.2006 Сообщения: 14 Откуда: Екатеринбург
|
Добавлено: Чт 30 Мар 2006 18:43 Заголовок сообщения: |
|
|
Импортировал из Ingeo файл Ingeo_TLB.pas...
В нем IIngeoNavigator (MainWindow.MapWindow.Navigator) описан следующим образом:
IIngeoNavigator = interface(IDispatch)
['{78AB23FA-FBBF-11D3-970E-000021C6D845}']
procedure ZoomToFitPaperRect(aX1: Double; aY1: Double; aX2: Double; aY2: Double); safecall;
procedure ZoomToFitWorldRect(aX1: Double; aY1: Double; aX2: Double; aY2: Double); safecall;
procedure Navigate(aCenterX: Double; aCenterY: Double; aZoomScale: Double); safecall;
procedure FitWorldBounds(aX1: Double; aY1: Double; aX2: Double; aY2: Double;
aFitMode: TIngeoNavigatorFitMode); safecall;
end;
IIngeoNavigatorDisp = dispinterface
['{78AB23FA-FBBF-11D3-970E-000021C6D845}']
procedure ZoomToFitPaperRect(aX1: Double; aY1: Double; aX2: Double; aY2: Double); dispid 1;
procedure ZoomToFitWorldRect(aX1: Double; aY1: Double; aX2: Double; aY2: Double); dispid 2;
procedure Navigate(aCenterX: Double; aCenterY: Double; aZoomScale: Double); dispid 3;
procedure FitWorldBounds(aX1: Double; aY1: Double; aX2: Double; aY2: Double;
aFitMode: TIngeoNavigatorFitMode); dispid 4;
end;
Через интерфейс IIngeoNavigator ни как не получить XAngle, его явно нужно приводить к IIngeoMatrixProjectionNavigator.
IngeoMatrixProjectionNavigator := anIngeo.MainWindow.MapWindow.Navigator as IIngeoMatrixProjectionNavigator; - так всегда возвращает ноль + в диалоге "Задать направление осей координат" сбивается угол!
Подозреваю что нужно как-то поменять описание интерфейса, помогите... Нужен проверенный, рабочий код.
netz[@]bk.ru |
|
Вернуться к началу |
|
 |
Рустам Тукаев Администратор сайта
Зарегистрирован: 14.02.2005 Сообщения: 30 Откуда: ИНТЕГРО
|
Добавлено: Пт 31 Мар 2006 01:07 Заголовок сообщения: |
|
|
Codegen писал(а): | Импортировал из Ingeo файл Ingeo_TLB.pas...
|
Все гораздо проще, можно и без приведения типов:
Код: |
function GetAngle(App: IIngeoApplication): Double;
var
Navigator: OleVariant;
begin
Navigator := App.MainWindow.MapWindow.Navigator;
Result := Navigator.XAngle;
end;
|
|
|
Вернуться к началу |
|
 |
|