На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Не работает функция SetDestName() у компонента QDMapConvertor

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Не работает функция SetDestName() у компонента QDMapConvertor
 
Версия библиотек ГИС Конструктор 14.0.1.21 FREE. Хотя, было замечено и на других, последних версиях не FREE.

1. При вызове
Код
...
ui->qDMapConvertor->SetDestName(str);
ui->qDMapConvertor->SetDestType(TD_VIEW);
ui->qDMapConvertor->Convert();
На вызываемой форме компонента в поле "Выходной файл" не передаётся значение переменной "str". Название генерируется автоматически по месту нахождения исходного файла sxf.

2. Еще вопрос. Как в форму передать путь к Классификатору?
 
Добрый день!

1. Ошибку исправим, изменения войдут в следующую версию ГИС Конструктор - спасибо.
2. При необходимости передавать программно большое число параметров импорта можно использовать функцию ImportFromAnySxfPro() (vecexapi.h):
Код
 // Загрузить (импортировать) карту из файла SXF, TXF или DIR с 
 // использованием Select с преобразованием топокарты к зоне документа
 // Файлы SXF и TXF могут хранить координаты в метрах, радианах или градусах
 // hmap    - идентификатор открытой карты (рекомендуется указывать
 //           для определения текущей зоны топокарты) или 0;
 // sxfname - имя загружаемого файла типа SXF, TXF или DIR;
 // rscname - имя файла классификатора, с которым загружается карта,
 //           имя классификатора можно запросить из SXF (TXF) функцией GetRscNameFromSxf
 //           или из карты; для файла DIR может быть 0;
 // mapname - имя создаваемой карты (обычно совпадает с именем SXF (TXF))
 //           или ноль или указатель на пустую строку (буфер размером MAX_PATH
 //           c нулевым байтом равным нулю) или указатель на папку для размещения
 //           карты. Если имя карты не задано или задана только папка, то карта
 //           создается с именем SXF (TXF) и расширением ".sit". Если namemap
 //           указывает на буфер достаточной длины (size), то в буфер записывается
 //           имя созданной карты;
 //           Для файла DIR тип общей карты - MPT (проект данных, включающий все
 //           открытые карты из DIR) или MAP (многолистовая карта);
 // size    - длина буфера, на который указывает переменная namemap, или 0. Обычно длина
 //           равна MAX_PATH_LONG (1024);
 // handle  - идентификатор окна диалога, которому посылаются уведомительные
 //           сообщения (HWND для Windows, CALLBACK-Функция для Linux);
 // select  - фильтр загружаемых объектов и слоев, если необходима выборочная
 //           обработка данных;
 // frscfromsxf - значение флажка "разрешить использование
 //               имени классификатора, указанного в файле sxf"
 // typesit - тип создаваемых карт в проекте MPT при импорте DIR (1- SIT; -1- SITX)
 // password - пароль для создания защищенного хранилища карты (SITX)
 // psize    - длина пароля в байтах
 // transform - признак необходимости трансформировать загружаемую карту в систему координат hmap
 //             (если hmap и transform не равно 0)
 // hevent    - адрес функции обратного вызова для записи в протокол ошибок выполнени программы
 // eventparam - первый параметр функции обратного вызова
 // Для добавления открытой карты в документ необходимо вызвать функцию
 // mapAppendData(hmap, namemap). Если mapname содержит имя карты типа MAP и
 // она содержит хотя бы один лист, то при импорте данных выполняется создание
 // нового листа в карте MAP. В этом случае функция mapAppendData не должна вызываться.
 // При ошибке возвращает ноль

_VECIMP long int _VECAPI ImportFromAnySxfProEx(HMAP hmap, const WCHAR * namesxf,
                                            const WCHAR * namersc,  WCHAR * namemap, long int size,
                                            HMESSAGE handle, HSELECT select, long int frscfromsxf,
                                            long int typesit, const WCHAR * password, long int psize,
                                            long int transform, EVENTLOG hevent, void * eventparam);
_VECIMP long int _VECAPI ImportFromAnySxfProM(HMAP hmap, const WCHAR * namesxf,
                                            const WCHAR * namersc,  WCHAR * namemap, long int size,
                                            HMESSAGE handle, HSELECT select, long int frscfromsxf,
                                            long int typesit, const WCHAR * password, long int psize,
                                            long int transform);
_VECIMP long int _VECAPI ImportFromAnySxfPro(HMAP hmap, const WCHAR * namesxf,
                                            const WCHAR * namersc, WCHAR * namemap,
                                            long int size, HMESSAGE handle,
                                            HSELECT select, long int frscfromsxf,
                                            long int typesit,
                                            const WCHAR * password, long int psize);
Для динамического получения информации о процессе импорта и обновления интерфейсных элементов (например, прогресс-бар значением процентов) предусмотрена функция обратного вызова. В следующем исходном коде приведен пример ее использования:
Код
long int SxfToMapMessageHandler(long int hwnd, long int code, WPARAM wParam, LPARAM lParam,
                                long int typemsg)
{  
  if (!SxfToMapDialog)
    return 0;

  QCoreApplication::processEvents();

  if (SxfToMapDialog)
  {
    switch (code)
    {
      case WM_OBJECT:
        return SxfToMapDialog->OnObjectMessage(wParam, lParam);
        break;

      case WM_ERROR:
        return SxfToMapDialog->OnErrorMessage();
        break;

      default:
        break;
    }
  }

  return 0;
}

// ...
int isImported = ImportFromAnySxfPro((HMAP)0, InputPath, RscPath, OutputMapPath,
                                       sizeof(OutputMapPath), SxfToMapMessageHandler, (HSELECT)0,
                                       useRscFromSxf, createSitxWhenImportingDir, 0, 0);
 
Цитата
Александр Савелов написал:
2. При необходимости передавать программно большое число параметров импорта можно использовать функцию ImportFromAnySxfPro() (vecexapi.h):
Как раз эту функцию я изначально использую. Однако, столкнулся с некоторыми нюансами (описал их в соседней теме) и пытаюсь их предусмотреть путем вызова диалога конвертации.
Цитата
Александр Савелов написал:
Для динамического получения информации о процессе импорта и обновления интерфейсных элементов (например, прогресс-бар значением процентов) предусмотрена функция обратного вызова. В следующем исходном коде приведен пример ее использования
Вот за это большое спасибо! Было бы здорово, если это попадет в документацию.
 
Александр Савелов, стал разбираться с процентами для прогресс-бара и что-то не понятно...
1. Где прописывается функция "long int SxfToMapMessageHandler()"? В файле mainwidget.cpp? В этом случае не получается вызвать функции, прописанные в MainWidget.
2. Что такое "SxfToMapDialog"? Если это моя главная форма в которой описана функция "OnObjectMessage" и "OnErrorMessage", то
Код
  if (!SxfToMapDialog)
    return 0;
в этом месте выдаёт ошибку.

Версия Qt 5.11.0
 
1. В данном случае SxfToMapMessageHandler - это глобальная функция, соответствующая типу MSGHANDLER (mapsyst.h):
Код
// Обработчик сообщений
typedef long int (*MSGHANDLER)(long int hwnd, long int code, long int p1, long int p2, long int typemsg);
Вы можете разместить ее в удобном для Вас месте и передавать указатель на нее в параметр handle функции ImportFromAnySxfPro.

2. В данном примере SxfToMapDialog - это указатель на глобальный экземпляр диалога. В блоках кода обработки сообщений WM_OBJECT и WM_ERROR вызываются функции диалога для обработки данных сообщений (например, в диалоге может обновляться состояние прогресс-бара).
Страницы: 1
Читают тему (гостей: 1)



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

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности