Плагины

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

Re: Плагины

Сообщение Матвеич » 20 фев 2025, 11:37

Доброго времени суток !


где и в чем допущена ошибка ?

katalog_uz.py находится в папке buttons

запускаю point_uz в модуле _init_.py print( katalog_uz.point_uz(self))


текст katalog_uz.py

import sys
sys.path.insert(0, 'C:\\DJOKER\\MapTopik\\buttons')
def point_uz(self) -> None:
# открыть файл выбора условного знака
r = 2*5
print(' _код точки ... ',r)
return r



Все работает прекрасно , значение r возвращает: 10 .
заменяю r = 2*5 на r=2*7 , собираю и запускаю программу - значение r остается равным 10.

выхожу из Аксиомы , снова устанавливаю свой дополнительный модуль , выбираю пункт меню вычислений , все нормально и r=14
работаю в PyCharm 2024.3.2 , компилирую _init_.py и katalog_uz .
Аватара пользователя
Матвеич
Пользователь
Сообщения: 141
Зарегистрирован: 09 янв 2024, 14:43

Re: Плагины

Сообщение Матвеич » 20 фев 2025, 15:54

добрый вечер !

добавил этот оператор и заработало
from .buttons.katalog_uz import point_uz,pline_uz,region_uz,text_uz

благодаря опыту и интуиции , а как хочется просто прочитать в руководстве что надо делать
Аватара пользователя
Матвеич
Пользователь
Сообщения: 141
Зарегистрирован: 09 янв 2024, 14:43

Re: Плагины

Сообщение Матвеич » 24 фев 2025, 17:28

Доброго времени суток !

как считать в программе координаты X,Y в окне карты, где кликнули указателем курсора пользовательской кнопкой ?
какие операторы применить ?
(MapTool не помогает)
Аватара пользователя
gisamap
Пользователь
Сообщения: 432
Зарегистрирован: 18 окт 2019, 11:03

Re: Плагины

Сообщение gisamap » 24 фев 2025, 18:18

Добрый день.
Создайте class дочерний от MapTool см https://axipy.axioma-gis.ru/6.2/referen ... py.MapTool
class MyTool(MapTool):

def mousePressEvent(self, event):
print('mouse pressed')
pos_view=self.to_scene(event.pos())

return self.PassEvent

pos_view - координаты карты
Матвеич писал(а): 24 фев 2025, 17:28 Доброго времени суток !

как считать в программе координаты X,Y в окне карты, где кликнули указателем курсора пользовательской кнопкой ?
какие операторы применить ?
(MapTool не помогает)
Аватара пользователя
Матвеич
Пользователь
Сообщения: 141
Зарегистрирован: 09 янв 2024, 14:43

Re: Плагины

Сообщение Матвеич » 25 фев 2025, 12:03

Gisamap добрый день !

Ваш рекомендуемый фрагмент :

class MyTool(MapTool):
def mousePressEvent(self, event) -> bool:
print('mouse pressed')
self.pos_view = self.to_scene(event.pos())
return self.PassEvent

вставляю в модуль C:\DJOKER\MapTopik\buttons\katalog_uz.py
запускаю и mousePressEvent не работает.

в строке : def mousePressEvent(self, event) -> bool:
mousePressEvent не активно.

вероятно дочерний класс от MapTool создан неверно , а как правильно не знаю.
В руководстве простых работающих примеров нет.



структура моей программы .
_init_.py

------------------
------------------
import sys
sys.path.insert(0, 'C:\\DJOKER\\MapTopik\\buttons')
from .buttons.katalog_uz import point_uz,pline_uz,region_uz,text_uz

class MapTopik(Plugin):
def __init__(self) -> None:
---------------------------------
---------------------------------
self._action5: ActionButton = ActionButton(
title=self.tr("точечный знак"),
icon=st3 ,
on_click=self.uz_point,
enable_on=axipy.ObserverManager.HasTables,
tooltip=self.tr("точечный топографический условный знак")
)
position = Position(tr("Условные знаки"), tr("Минимальный"))
position.add(self._action5)

----------------------------
----------------------------
# *******************************************
def uz_point(self) -> None :
# построение точечных условных знаков
# *******************************************
-----------------------------
# точечный условный знак (
# 157 - код условного точечного знака, table - редактируемая таблица)
point_uz(self,157,table)
------------------
------------------
конец основной программы

############################################
структура модуля katalog_uz.py
#############################################
from PySide2.QtCore import Qt
from axipy import MapTool

# ********************
def load(self):
# ********************
self.attr_index = 0

# *****************************************************
def point_uz(self, kod, ntable) -> None:
# построение по коду точечных объектов
# *****************************************************
class MyTool(MapTool):
def mousePressEvent(self, event) -> bool:
print('.4mouse pressed')
self.pos_view = self.to_scene(event.pos())
return self.PassEvent

#*************************************
def pline_uz(kod) -> None:
# построение по коду линейных объектов
#*************************************
print('линия ', kod)

# *****************************
def region_uz(kod) -> None:
# построение по коду площадных объектов
# ******************************
print('площадной объект ', kod)

# ***********************************
def text_uz(kod) -> None:
# построение по коду текстовых объектов
# *************************************
print('текст ', kod)


P.S. если возможно приведите самый маленький работающий фрагмент.
Аватара пользователя
Александр
Администратор
Сообщения: 607
Зарегистрирован: 18 апр 2019, 11:21

Re: Плагины

Сообщение Александр » 27 фев 2025, 10:17

Матвеич писал(а): 25 фев 2025, 12:03 P.S. если возможно приведите самый маленький работающий фрагмент.
Дмитрий писал(а): 03 фев 2025, 11:36 Для решения данной задачи Вам необходимо реализовать свой инструмент карты от класса axipy.MapTool https://axipy.axioma-gis.ru/6.1/referen ... ool.cursor.

Как образец можно посмотреть пример "Пример Инструмента axipy", который входит в поставку и расположен в каталоге plugins/ru_axioma_gis_axipy_example_tool.
используя ваши файлы
__init__.py

Code: Select all

import axipy
from .katalog_uz import MyTool1


class MapTopik(axipy.Plugin):
def __init__(self) -> None:
self._tool_button1 = axipy.ToolButton(
title=self.tr("точечный знак1"),
on_click=MyTool1,
enable_on=axipy.ObserverManager.HasTables,
)
position = axipy.Position(axipy.tr("Условные знаки"), axipy.tr("Минимальный"))
position.add(self._tool_button1)
katalog_uz.py

Code: Select all

from PySide2 import QtGui
from axipy import MapTool


class MyTool1(MapTool):
def mousePressEvent(self, event: QtGui.QMouseEvent) -> bool:
print('.4mouse pressed', self.to_scene(event.pos()))
return self.PassEvent
Аватара пользователя
Матвеич
Пользователь
Сообщения: 141
Зарегистрирован: 09 янв 2024, 14:43

Re: Плагины

Сообщение Матвеич » 27 фев 2025, 13:49

Благодарю Вас за помощь , этот блок заработал.

Я правильно понял , что при построении линейных , площадных , текстовых объектов с помощью
пользовательских кнопок мы используем методы: class axipy.MapTool
Аватара пользователя
Матвеич
Пользователь
Сообщения: 141
Зарегистрирован: 09 янв 2024, 14:43

Re: Плагины

Сообщение Матвеич » 01 мар 2025, 14:37

доброго времени суток !!!

почти крайний вопрос
Вложения
Александр Дмитрий.docx
(36.97 КБ) 6668 скачиваний
Аватара пользователя
Дмитрий
Администратор
Сообщения: 98
Зарегистрирован: 04 июн 2019, 11:33

Re: Плагины

Сообщение Дмитрий » 05 мар 2025, 17:14

Здравствуйте!

1. Для того, чтобы в дереве выбрать элемент можно использовать метод QTreeWidget.setCurrentItem https://doc-snapshots.qt.io/qtforpython ... urrentItem
2. Для запоминания между запусками необходимо использовать axipy.Plugin.settings https://axipy.axioma-gis.ru/6.2/referen ... n.settings. Его можно пробросить из модуля в форму

Поправленный пример приложен в аттаче
Вложения
MapTopik_select.zip
(8.2 КБ) 5271 скачивание
Аватара пользователя
Матвеич
Пользователь
Сообщения: 141
Зарегистрирован: 09 янв 2024, 14:43

Re: Плагины

Сообщение Матвеич » 05 мар 2025, 19:18

Уважаемый Дмитрий !

Просто хочется встать и снять шляпу !!!!!!!!!!!!!!!!!!!!
Благодарю ВАС !!!!!!!!!!!!!!!!!!!!!!!!!!!!

P.S. эти ссылки я смотрел , но как они взаимодействуют .... ???? так и не понял !
Ответить