| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		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;
 
 | 	 
  | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |