Плагины

Вопросы связанные с работой ГИС Аксиома
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 15 фев 2024, 06:42

Александр ! Добрый день !

На ваше усмотрение
Вложения
Вопрос_6.docx
(40.16 КБ) 29 скачиваний
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 21 фев 2024, 14:55

Александр ! Добрый вечер.
Когда Вы планируете выпуск новой версии руководства разработчика ?
Аватара пользователя
Александр
Сообщения: 433
Зарегистрирован: 18 апр 2019, 08:21

Re: Плагины

Сообщение Александр » 23 фев 2024, 10:53

Матвеич писал(а): 15 фев 2024, 06:42 Александр ! Добрый день !

На ваше усмотрение
Пример создания модуля
MapTopik.zip
(9.39 КБ) 22 скачивания
:

Code: Select all

import csv
import os
from pathlib import Path

import axipy as axp
from PySide2 import QtCore
from PySide2.QtCore import Qt
from PySide2.QtGui import QImage, QPainter, QPixmap
from PySide2.QtWidgets import QDialog, QTreeWidgetItem

from .forms.ui_form import Ui_Dialog as form


class Form(QDialog, form):
def __init__(self, parent=None):
super().__init__(parent)

# инициализация пользовательского интерфейса формы
self.setupUi(self)
# скрываем кнопку справки
self.setWindowFlag(QtCore.Qt.WindowContextHelpButtonHint, False)
# загрузка данных в форму
self.load()
# подключение сигналов
self.connect_signals()

def connect_signals(self):
# сменилась текущая строка в дереве
self.tree.currentItemChanged.connect(self.on_tree_current_item_changed)
# Нажали на кнопку "Показать условный знак"
self.btn_show_sign.clicked.connect(self.show_sign)
# Нажали на кнопку "Как нарисовать условный знак?"
self.btn_howto.clicked.connect(self.howto)

def load(self):
"""
Загружаем данные из файла form.csv в дерево
"""
path = Path(os.path.dirname(os.path.abspath(__file__)))
path = path / 'forms' / 'styles.csv'

# Открываем csv-файл для чтения
with open(str(path), mode="r", encoding="utf-8-sig") as file:
reader = csv.DictReader(file, skipinitialspace=True)

# Создаем словарь для хранения родительских элементов по ID
parents = {}

# Проходимся по каждой строке в csv-файле
for row in reader:
# Получаем значения из колонок
id = int(row['ID'])
parent_id = int(row['ParentID'])
text = row['text']
data = row['data']

# Создаем новый элемент QTreeWidgetItem
item = QTreeWidgetItem()
item.setText(0, text)
item.setData(0, Qt.UserRole, data)

# Если ParentID равен 0, то это объект верхнего уровня
if parent_id == 0:
self.tree.addTopLevelItem(item)
else:
# Иначе ищем родительский элемент по ParentID
parent = parents.get(parent_id)
if parent:
parent.addChild(item)

# Добавляем элемент в словарь родительских элементов
parents[id] = item

def on_tree_current_item_changed(self, current: QTreeWidgetItem, previous: QTreeWidgetItem):
if current and str(current.data(0, Qt.UserRole)) != "":
# Рисуем условное обозначение в рамку
self.draw_image(current.data(0, Qt.UserRole))
else:
self.lbl_img.setPixmap(None)

def draw_image(self, style: str):
"""
Рисуем условное обозначение в рамку
:param style: стиль в формате MapInfo
"""
image = QImage(50, 50, QImage.Format_ARGB32_Premultiplied)
image.fill(Qt.transparent)
painter = QPainter(image)

stl = axp.Style.from_mapinfo(style)
# Для каждого типа стиля, создаём свою геометрию и рисуем её в рамку
if isinstance(stl, axp.PointStyle):
point = axp.Point(25, 25)
stl.draw(point, painter)
self.lbl_img.setPixmap(QPixmap.fromImage(image))
elif isinstance(stl, axp.PolygonStyle):
polygon = axp.Polygon((5, 5), (10, 35), (45, 45), (45, 15))
stl.draw(polygon, painter)
self.lbl_img.setPixmap(QPixmap.fromImage(image))
elif isinstance(stl, axp.LineStyle):
line = axp.LineString([(5, 5), (20, 25), (25, 10), (45, 45)])
stl.draw(line, painter)
self.lbl_img.setPixmap(QPixmap.fromImage(image))

def show_sign(self):
print('show sign')

def howto(self):
print('how to')

@staticmethod
def show_dialog() -> None:
dlg = Form(axp.view_manager.global_parent)
dlg.open()
img_topik.png
img_topik.png (13.56 КБ) 569 просмотров
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 24 фев 2024, 09:51

Александр Доброго времени суток!
Небо, небо не видело такого Пацака как я.... Это просто КЮ...
Мои беды во вложении..
Вложения
Вопрос 8.docx
(544.38 КБ) 22 скачивания
Аватара пользователя
Александр
Сообщения: 433
Зарегистрирован: 18 апр 2019, 08:21

Re: Плагины

Сообщение Александр » 24 фев 2024, 13:31

В PyCharm проект открывается выбором папки, а не файла.
Пример предназначен для запуска из Аксиомы в виде плагина: https://axioma-gis.ru/axipy/dev-guide/5.2/user_guide/plugins/index.html
Мои комментарии (выделено красным) внутри файла:
Вопрос 8 - rev.docx
(609.27 КБ) 17 скачиваний
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 25 фев 2024, 06:57

Александр ! Доброго времени суток !

Получилось запустить как плагин !!! (ПАЦАКИ !!! Читайте ПАПИРУС !!!!!! , только в этом наше спасение.)

В PyCharm открыл папку (не файл) - сообщение о ошибке то же самое:
ImportError: attempted relative import with no known parent package

Т.е. PyCharm и Qt Designer для Аксиомы я использовал некорректно !
где можно почитать, как правильно использовать Qt Designer для разработки плагинов Аксиомы
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 25 фев 2024, 08:58

Александр !

Читаю папирус , что-то проясняется ! Пацаки !!!! Читайте папирус , внимательно!!!
Начало есть !!!!

Благодарю Вас за ТЕРПЕНИЕ !!!!
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 28 фев 2024, 16:57

Александр ! Доброго времени суток!!!

Прислали небольшой рабочий фрагмент плагина MapTopik - ИЗУЧАЮ И ВСЕ СТАНОВИТСЯ ПОНЯТНО !!!!

Вставляйте в руководство рабочие фрагменты модулей , они просто необходимы.

Вы очень изящно оформили диалог классификатора условных знаков, вывели меня на стратегический простор !!!

ЧИСТОГО ВАМ НЕБА !!!!

P.S. Очень красивое решение !!!!!
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 29 фев 2024, 08:55

Вопрос 8.docx
(164.69 КБ) 22 скачивания
Александр ! Доброго времени суток!

Уточните процедуру конвертации стилей линий из Mapinfo в Аксиому.
Аватара пользователя
Александр
Сообщения: 433
Зарегистрирован: 18 апр 2019, 08:21

Re: Плагины

Сообщение Александр » 29 фев 2024, 13:25

Для использования пользовательских стилей MapInfo в Аксиоме необходимо:
  1. Сконвертировать стили mapinfow.pen в формат TRTP с помощью модуля "Конвертер стилей линий" в новую папку.
    Каждый файл TRTP будет соответствовать отдельному стилю линии Аксиомы.
  2. Подключить созданную папку стилей к Аксиоме с помощью модуля "Каталоги со стилями"
    С его помощью можно создать несколько наборов стилей и переключаться между ними.
  3. При необходимости, отредактировать созданные TRTP-файлы с помощью модуля "Редактор стилей линий".
    Редактор поддерживает работу как в Windows, так и в Linux и macOS. Обратите внимание, что документация по редактору может быть устаревшей.
Ответить