Встраивание окна Axioma в своё приложение.

Вопросы связанные с работой ГИС Аксиома
Аватара пользователя
grig27
Сообщения: 16
Зарегистрирован: 27 май 2019, 04:53

Встраивание окна Axioma в своё приложение.

Сообщение grig27 » 07 июн 2019, 10:51

Добрый день.

Пробую встраивать возможности Axioma в своё приложение. Наткнулся на проблему инициализации приложения.
На этапе выполнения axioma.app.AxiomaApplication(sys.argv) возникает ошибка "could not find or load the Qt platform plugin windows".

Устанавливаю переменные окружения - QT_PLUGIN_PATH и QT_QPA_PLATFORM_PLUGIN_PATH. Ничего не меняется.
Решается или копирование qt.conf в папку со своим приложением и прописываением в файле пути до QTPlugin. Или копирование папки platforms в папку с приложением.
Оба пути не подходят как решение... подскажите, может у Вас есть решение этой проблемы?
Аватара пользователя
Smeltzov
Сообщения: 13
Зарегистрирован: 27 май 2019, 14:40

Re: Встраивание окна Axioma в своё приложение.

Сообщение Smeltzov » 07 июн 2019, 14:05

А на чём приложение? На Qt/без? на питоне с Qt/без?
У вас свой интерпретатор Python или пользуетесь тем, что в Аксиоме? если свой - то какой версии
Пришлите минимальный пример, на котором проявляется ошибка.
Аватара пользователя
grig27
Сообщения: 16
Зарегистрирован: 27 май 2019, 04:53

Re: Встраивание окна Axioma в своё приложение.

Сообщение grig27 » 07 июн 2019, 14:17

Пишем на Delphi. Используем Python Embed.
https://docs.python.org/3.7/extending/e ... on%20embed
Подготовлю пример.
Аватара пользователя
grig27
Сообщения: 16
Зарегистрирован: 27 май 2019, 04:53

Re: Встраивание окна Axioma в своё приложение.

Сообщение grig27 » 10 июн 2019, 06:29

Добрый день.

Выложил по ссылке
https://yadi.sk/d/BUc4Etz_ehpoMg

Если убрать файл qt.conf, приложение не видит плагины.

Нижнее поле - лог выполнения.
PyDo - выполняемые команды, PIO - вывод питона. Env - установка окружения.

Верхняя кнопка, запуск Axioma.

Ниже - кнопка выполнения блока команд.

Ещё ниже, выполнение отдельной команды.

Как мы делаем в QGIS. Открываем окно карты QgsMapCanvas, и меняем Parent виндовой функцией SetParent.

Примерный код представлен ниже. map_hwnd ID окна который уже вставляем в своё окно.

К стати. Приложение почему то падает после запуска через минуту где то. Что происходит, не понятно.
Безымянный_1.png
Безымянный_1.png (29.76 КБ) 15219 просмотров

Код: Выделить всё

# -*- coding: utf-8 -*-
import sys
from qgis.core import *
from qgis.gui import *
import gdal
import ogr
# create main window
canvas = QgsMapCanvas()
	
canvas.setCanvasColor(Qt.white)
canvas.enableAntiAliasing(True)
#canvas.useImageToRender(False)
#layer = QgsVectorLayer("d://85_region.shp", "a1", "ogr")	
layer = QgsVectorLayer("D://TempUser//42_wgs//85_region.shp", "a1", "ogr")
#layer = QgsVectorLayer("D://TempUser//UNG//KPT//Участки.tab", "Участки", "ogr")
#file = QFileDialog.getOpenFileName(self,"Open", ".", "Shp(*.shp)")
#layer = QgsVectorLayer(file, "My Shape", "ogr")
	
if not layer.isValid():
	print("Layer failed to load!")
else:
	print("valid!")

QgsProject.instance().addMapLayer(layer);
canvas.setExtent(layer.extent())
# set the map canvas layer set
canvas.setLayers([layer])
canvas.setWindowFlags(Qt.SubWindow)
#| Qt.FramelessWindowHint
canvas.show()
extent = layer.extent()
canvas.setExtent(extent)
map_hwnd = int(canvas.effectiveWinId())
Последний раз редактировалось grig27 10 июн 2019, 09:51, всего редактировалось 2 раза.
Аватара пользователя
grig27
Сообщения: 16
Зарегистрирован: 27 май 2019, 04:53

Re: Встраивание окна Axioma в своё приложение.

Сообщение grig27 » 10 июн 2019, 09:47

Пытаюсь создать и показать окно карты.

Код: Выделить всё

# -*- coding: utf-8 -*-
import sys
import axioma.app
from PyQt5.QtCore import QRectF, QPointF
import gdal
import ogr
map = axioma.render.Map()
#print(map.effectiveWinId())
mapView = axioma.gui.MapView(map)
mapView.show()
print(mapView.effectiveWinId())
map_hwnd = mapView.effectiveWinId()
Ошибка в coordsys.dll.

Как открыть окно карты, пока примера не нашёл...
Аватара пользователя
Smeltzov
Сообщения: 13
Зарегистрирован: 27 май 2019, 14:40

Re: Встраивание окна Axioma в своё приложение.

Сообщение Smeltzov » 11 июн 2019, 15:16

Приложение почему то падает после запуска через минуту где то. Что происходит, не понятно.
При использовании бесплатной версии Аксиомы обязательно поднимать главное окно программы. Оно должно быть видимым. Такие условия.
Ошибка в coordsys.dll
Аксиома не смогла показать Окно Карты MapView без КС. Добавьте слои c КС в Карту Map.
Хорошая ошибка, спасибо. Мы проработаем этот момент, чтобы такого не происходило.
qt.conf
Попробуйте добавить путь к Qt плагинам через статический метод QCoreApplication::addLibraryPath
до создания QApplication
https://doc.qt.io/qt-5/qcoreapplication ... ibraryPath
https://doc.qt.io/qt-5/deployment-plugi ... -directory
Аватара пользователя
grig27
Сообщения: 16
Зарегистрирован: 27 май 2019, 04:53

Re: Встраивание окна Axioma в своё приложение.

Сообщение grig27 » 13 июн 2019, 06:02

Статический метод сработал! Это уже хорошо.

Странно, но по идее это приравнивается к QT_QPA_PLATFORM_PLUGIN_PATH. Загадочный этот Qt... От версии к версии всё по разному.

Мы пробуем в новый Кадофис встроить возможности Аксиомы.
У Вас есть ещё RunTime версия Аксиомы.

Как нам поступать в дальнейшем... Какой режим более оптимален?
Аватара пользователя
Александр
Сообщения: 405
Зарегистрирован: 18 апр 2019, 08:21

Re: Встраивание окна Axioma в своё приложение.

Сообщение Александр » 13 июн 2019, 09:31

Для использования Аксиомы без главного окна программы:
  • разработчикам требуется приобрести платную лицензию Аксиомы.
  • для распространения и активации программы требуются лицензии рантайм.
Конкретные предложения отправлю Вам на почту.
Аватара пользователя
grig27
Сообщения: 16
Зарегистрирован: 27 май 2019, 04:53

Re: Встраивание окна Axioma в своё приложение.

Сообщение grig27 » 13 июн 2019, 09:58

Напишите на ...
Отредактировано модератором: убрал почту
Аватара пользователя
grig27
Сообщения: 16
Зарегистрирован: 27 май 2019, 04:53

Re: Встраивание окна Axioma в своё приложение.

Сообщение grig27 » 18 июн 2019, 08:26

Создал главное окно, встроил в своё окно. Всё вроде бы отображается, но всё равно падает через некоторое время. Без встраивания, всё работает нормально(вроде бы:-)).
Ответить