Страница 7 из 15

Re: Плагины

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

На ваше усмотрение

Re: Плагины

Добавлено: 21 фев 2024, 14:55
Матвеич
Александр ! Добрый вечер.
Когда Вы планируете выпуск новой версии руководства разработчика ?

Re: Плагины

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

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

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 КБ) 1296 просмотров

Re: Плагины

Добавлено: 24 фев 2024, 09:51
Матвеич
Александр Доброго времени суток!
Небо, небо не видело такого Пацака как я.... Это просто КЮ...
Мои беды во вложении..

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 КБ) 23 скачивания

Re: Плагины

Добавлено: 25 фев 2024, 06:57
Матвеич
Александр ! Доброго времени суток !

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

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

Т.е. PyCharm и Qt Designer для Аксиомы я использовал некорректно !
где можно почитать, как правильно использовать Qt Designer для разработки плагинов Аксиомы

Re: Плагины

Добавлено: 25 фев 2024, 08:58
Матвеич
Александр !

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

Благодарю Вас за ТЕРПЕНИЕ !!!!

Re: Плагины

Добавлено: 28 фев 2024, 16:57
Матвеич
Александр ! Доброго времени суток!!!

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

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

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

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

P.S. Очень красивое решение !!!!!

Re: Плагины

Добавлено: 29 фев 2024, 08:55
Матвеич
Вопрос 8.docx
(164.69 КБ) 30 скачиваний
Александр ! Доброго времени суток!

Уточните процедуру конвертации стилей линий из Mapinfo в Аксиому.

Re: Плагины

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