На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты
АРХИВ ФОРУМА...
здесь вы можете ознакомиться с материалами форума до 08.06.2008

Oleg Belenkov (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Oleg Belenkov
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 399 След.
Проброс USB-ключа., Как пробросить USB-ключ из OS Windows в Astra Linux
 
В виртуальных машинах может применяться сетевой ключ. В этом случае драйвер ключа обращается по заданному ip-адресу, где стоит сервер ключа и физический ключ.
Рисование эллипса на карте
 
В новую версию добавлена функция:
[CODE] // Построить эллипс по двум точкам и параметрам полуосей
// Координаты точек в метрах в системе документа
// centre - координаты центра эллипсоид в метрах на местности
// bigaxis - большая полуось в метрах на местности
// littleaxis - малая полуось в метрах на местности
// angle - угол поворота большой полуоси в радианах против часовой стрелки
//         от направления на восток
// count - число точек метрики (от 16 до 128)
// Создаваемому объекту присваивается признак отображения сплайном,
// что позволяет минимизировать число точек метрики
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapBuildEllpse(HOBJ info, DOUBLEPOINT * center, double bigaxis, double littleaxis,
                                       double angle, long int count);[/CODE]
Кроме того, отображение эллипса встроено элементом в векторные знаки.
mapSetScreenImageSize, корректное использование
 
Текст функций такой:
[CODE] // Запросить/Установить размер диагонали видимого изображения
// экрана в миллиметрах (50 - 4000). При установке возвращает
// старое значение
// При ошибке возвращает 0

double SetScreenSize(double size, HDC hdc)
{
  if (size == 0)
    size = ::ScreenSize;

  double old = ::ScreenSize;
  ::ScreenSize = size;
  if (::ScreenSize > 4000.)
    ::ScreenSize = 4000.;
  else
  if (::ScreenSize < 50.)
    ::ScreenSize = 50.;

  HorPixelInMeter = sqrt((double)ScreenWidth  * ScreenWidth +
                               ScreenHeight * ScreenHeight);

  double temp = ::ScreenSize;
  HorPixelInMeter = HorPixelInMeter / temp * 1000.0;
  temp = ScreenScale;
  HorPixelInMeter = HorPixelInMeter * temp / 100.0;

  VerPixelInMeter = HorPixelInMeter;  
  return old;
}

// Запросить/Установить точность текущего режима экрана в точках
// на метр (1000 - 100000). При установке возвращает старое
// значение и пересчитывает коэффициент масштабирования экрана
// При ошибке возвращает 0

double GetScreenPrecision()
{
  return HorPixelInMeter;
}

double SetScreenPrecision(double value)
{
  if (value == 0)
    {
      SetScreenSize(0, 0);
      return HorPixelInMeter;
    }

  double old = HorPixelInMeter;

  // 28/04/06 заменил 100000 на 1000000
  value = max(39.0, min(1000000.0, value));  // 39 точек на метр - это 1 точка на дюйм. Меньше нельзя // 11/03/04  // 09/03/13

  // Установить текущие параметры
  mapSetScreenScale(0);

  // Поправить масштабный коэффициент
  ScreenScale  = ScreenScale * value / HorPixelInMeter;

  HorPixelInMeter = value;
  VerPixelInMeter = value;

  IsScreenPrecisionSet = 1;

  return old;
}

// Установить предельные размеры буфера изображения
// Должна вызываться до открытия данных
// При ошибке возвращает 0

_MAPIMP  long int _MAPAPI mapSetScreenImageSize(long int width, long int height)
{
  if (width == 0)
    width = ScreenWidth;

  if (height == 0)
    height = ScreenHeight;

  if (width < 128)
    width = 128;
  else
   if (width > 16 * 1024)
     width = 16 * 1024;

  if (height < 128)
    height = 128;
  else
   if (height > 8 * 1024)
     height = 8 * 1024;

  ScreenWidth  = width;
  ScreenHeight = height;
  IsScreenSet  = 1;

  if (MaxScreenWidth < ScreenWidth)
    MaxScreenWidth = ScreenWidth;
  if (MaxScreenHeight < ScreenHeight)
    MaxScreenHeight = ScreenHeight;

  // Уточнить размер экрана в миллиметрах для сохранения HorPixelInMeter
  ScreenSize = sqrt((double)ScreenWidth  * ScreenWidth + ScreenHeight * ScreenHeight) /
                     HorPixelInMeter * 1000.0 * ScreenScale / 100.0;
  return 1;
}

_MAPIMP long int _MAPAPI mapSetMaxScreenImageSize(long int width, long int height)
{
  if (width == 0)
    width = MaxScreenWidth;

  if (height == 0)
    height = MaxScreenHeight;

  if (width < 128)
    width = 128;
  else
   if (width > 16 * 1024)
     width = 16 * 1024;

  if (height < 128)
    height = 128;
  else
   if (height > 8 * 1024)
     height = 8 * 1024;

  MaxScreenWidth  = width;
  MaxScreenHeight = height;
  IsMaxScreenSet  = 1;
  return 1;
}

void _MAPAPI mapSetScreenPrecisionEx(double valueHor, double valueVer)
{
  if (valueHor == 0) valueHor = HorPixelInMeter;
  if (valueVer == 0) valueVer = VerPixelInMeter;

  valueHor = Max((double)39, Min((double)100000, valueHor));
  valueVer = Max((double)39, Min((double)100000, valueVer));

  // Установить текущие параметры
  mapSetScreenScale(0);

  // Поправить масштабный коэффициент
  ScreenScale  = ScreenScale * valueHor / HorPixelInMeter;

  HorPixelInMeter = valueHor;
  VerPixelInMeter = valueVer;

  IsScreenPrecisionSet = 1;
}

double _MAPAPI mapSetScreenScaleEx(double scale)
{
  if (scale == 0) scale = ScreenScale;

  double old = ScreenScale;
  ScreenScale = max(50., min(200., scale));

  SetScreenSize(ScreenSize, 0);

  return old;
}[/CODE]
Изменить параметры проекции, Изменить параметры проекции
 
В vectrapi.h приведен пример вызова функции Modify()

  // Загрузка библиотеки                                        
  HINSTANCE libInst = ::LoadLibrary("gisu64vectr.dll");        

  // Вызов функции                                              
  typedef long int (WINAPI * MODIFY)(HMAP hmap, TASKPARMEX * parm)

  MODIFY modify = (MODIFY)GetProcAddress(libInst, "Modify");

  long int rezult = 0;

  if (modify)
    rezult = (*modify)(hmap, parm);
                                                                 
  // Выгрузка библиотеки
  if (libInst)
    ::FreeLibrary(libInst);                                      
Обновление версии ГИС Конструктор, Нелегальная копия модуля - libqdmapacces.so
 
Обновление  ГИС Конструктор [B]Free[/B] выполняется по письменному запросу (по электронной почте).
На сайте размещена другая версия программы (обычный ГИС Конструктор).
Создание карты, Создание карты
 
Почитать про создание карты можно тут -

[URL=http://gistoolkit.ru/download/doc/mapapi.pdf]http://gistoolkit.ru/download/doc/mapapi.pdf[/URL]

4.2.2 Создание новой карты и плана

Стандартные диалоги для паспортов карт описаны в paspapi.h

Например:

// Диалог создания карты
// hmap     - идентификатор открытой карты или 0
// mapname  - указатель на строку, содержащую имя карты (файла паспорта)
//            После вызова функции значение строки может измениться!
// size     - длина строки, содержащей имя карты (не меньше 260)
// parm     - структура параметров для диалога (см. maptype.h)
// Help вызывается из mappasp.chm, топик CREATE_MAP
// При ошибке возвращает ноль

_PASPIMP long int _PASPAPI paspCreateMapUn(HMAP hmap,WCHAR *mapname, long int size, TASKPARMEX * parm);
Проблемы с mapGetObjectContour
 
Расчет рамки при повороте знака поправили. Войдет в новую версию ГИС Конструктор.
Спасибо за сообщение!
Проблемы с mapGetObjectContour
 
Эту функцию писали для подписей. Если подписи растягиваемые или несжимаемые, то полученные габариты нужно дополнительно корректировать.
Для запроса размера знаков есть другие функции - mapGetRscPrnImageSize, mapGetRscMarkFrame.
Асинхронная актуализация активности кнопок панели pantask (без участия пользователя)
 
MT_COMMANDENABLE посылается сверху, когда нужно запросить состояние кнопки\пункта меню в задаче. Нет смысла посылать эту команду снизу (из задачи).

Попробуйте отправить:

MainMessage(AW_GETCOMMAND, 0);

Эта команда перезапрашивает состояние всех кнопок и пунктов меню.
Как отобразить растры между картой и объектами на временной карте?
 
Через программируемый знак можно назначить любому объекту графический файл, врезку карты и другие данные.
Но это будут не измерительные изображения.

Программно можно организовать любой порядок отображения данных по своему алгоритму.
Чтобы поднять отдельную карту2 над растром, который отображается поверх другой карты1,
можно отключить отображение карты2 и отрисовать данные, а потом повторно отрисовать данные с включением карты2
и отключением других данных. Чтобы карта2 дорисовалась, а не стерла изображение, можно установить
параметр erase в значение -2 (см. mapPaintxxx)
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 399 След.



© КБ Панорама, 1991-2019