From 6a66140db7ea5080b3aac812098b1ed160a145b1 Mon Sep 17 00:00:00 2001
From: Natacha
Date: Thu, 28 Nov 2024 16:35:32 +0100
Subject: [PATCH] Custom CenIsere
---
CenIsere_AUTOMAP/CenIsere_AutoMap.py | 14 +-
CenIsere_AUTOMAP/README.md | 5 +-
CenIsere_AUTOMAP/__init__.py | 6 +-
CenIsere_AUTOMAP/about_form.py | 6 +-
CenIsere_AUTOMAP/canvas_editor.py | 202 ++++---
CenIsere_AUTOMAP/issues.py | 4 +-
CenIsere_AUTOMAP/metadata.txt | 12 +-
.../__pycache__/resources.cpython-310.pyc | Bin 0 -> 5876 bytes
CenIsere_AUTOMAP/tools/icons/CEN.png | Bin 0 -> 157525 bytes
.../1. Modèle carto standard.qpt | 120 +++++
.../2. Modèle carto plein page.qpt | 120 +++++
.../3. Modèle carto standard Cen Isere.qpt | 114 ++++
.../__pycache__/canvas.cpython-310.pyc | Bin 0 -> 8594 bytes
.../tools/mises_en_pages/canvas.py | 492 ++++++++++++++++++
.../tools/mises_en_pages/vague.png | Bin 0 -> 13790 bytes
.../tools/mises_en_pages/vague2.png | Bin 0 -> 4053 bytes
CenIsere_AUTOMAP/tools/resources.py | 4 +-
17 files changed, 962 insertions(+), 137 deletions(-)
create mode 100644 CenIsere_AUTOMAP/tools/__pycache__/resources.cpython-310.pyc
create mode 100644 CenIsere_AUTOMAP/tools/icons/CEN.png
create mode 100644 CenIsere_AUTOMAP/tools/mises_en_pages/1. Modèle carto standard.qpt
create mode 100644 CenIsere_AUTOMAP/tools/mises_en_pages/2. Modèle carto plein page.qpt
create mode 100644 CenIsere_AUTOMAP/tools/mises_en_pages/3. Modèle carto standard Cen Isere.qpt
create mode 100644 CenIsere_AUTOMAP/tools/mises_en_pages/__pycache__/canvas.cpython-310.pyc
create mode 100644 CenIsere_AUTOMAP/tools/mises_en_pages/canvas.py
create mode 100644 CenIsere_AUTOMAP/tools/mises_en_pages/vague.png
create mode 100644 CenIsere_AUTOMAP/tools/mises_en_pages/vague2.png
diff --git a/CenIsere_AUTOMAP/CenIsere_AutoMap.py b/CenIsere_AUTOMAP/CenIsere_AutoMap.py
index c64978f..2507612 100644
--- a/CenIsere_AUTOMAP/CenIsere_AutoMap.py
+++ b/CenIsere_AUTOMAP/CenIsere_AutoMap.py
@@ -50,7 +50,7 @@ class PgAutoMap:
maj_verif(NAME)
# Display About window on first use
- version = qgis.utils.pluginMetadata('CenRa_AUTOMAP','version')
+ version = qgis.utils.pluginMetadata('CenIsere_AUTOMAP','version')
s = QSettings()
versionUse = s.value("automap/version", 1, type=str)
if str(versionUse) != str(version) :
@@ -61,20 +61,20 @@ class PgAutoMap:
def initGui(self):
""" Build the plugin GUI. """
- self.toolBar = iface.addToolBar("CenRa_AutoMap")
- self.toolBar.setObjectName("CenRa_AutoMap")
+ self.toolBar = iface.addToolBar("CenIsere_AutoMap")
+ self.toolBar.setObjectName("CenIsere_AutoMap")
icon = QIcon(resources_path('icons', 'icon.png'))
# Open the online help
- self.help_action = QAction(icon, 'CenRa_AutoMap', iface.mainWindow())
+ self.help_action = QAction(icon, 'CenIsere_AutoMap', iface.mainWindow())
iface.pluginHelpMenu().addAction(self.help_action)
self.help_action.triggered.connect(self.open_help)
if not self.canvas_editor:
self.canvas_editor = AutoMap_Editor()
- self.automap_action = QAction(icon, 'CenRa_AutoMap',None)
+ self.automap_action = QAction(icon, 'CenIsere_AutoMap',None)
self.toolBar.addAction(self.automap_action)
self.automap_action.triggered.connect(self.open_editor)
'''
@@ -118,7 +118,7 @@ class PgAutoMap:
dialog.exec_()
def open_help():
""" Open the online help. """
- QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
+ QDesktopServices.openUrl(QUrl('https://plateformesig.CenIsere-outils.org/'))
def open_editor(self):
self.canvas_editor.show()
@@ -127,7 +127,7 @@ class PgAutoMap:
def unload(self):
""" Unload the plugin. """
if self.canvas_editor:
- iface.removePluginMenu('CenRa_AutoMap',self.automap_action)
+ iface.removePluginMenu('CenIsere_AutoMap',self.automap_action)
if self.provider:
QgsApplication.processingRegistry().removeProvider(self.provider)
diff --git a/CenIsere_AUTOMAP/README.md b/CenIsere_AUTOMAP/README.md
index 72f88d5..9ee5c05 100644
--- a/CenIsere_AUTOMAP/README.md
+++ b/CenIsere_AUTOMAP/README.md
@@ -1,4 +1 @@
-# CenRa_AutoMap
----
-Outil de création de mise en page,
-Permet de préprogramé des mise en page pour les mêtre à disposition des collégue.
+# CenIsere_AutoMap
diff --git a/CenIsere_AUTOMAP/__init__.py b/CenIsere_AUTOMAP/__init__.py
index f0ed432..8ce8350 100644
--- a/CenIsere_AUTOMAP/__init__.py
+++ b/CenIsere_AUTOMAP/__init__.py
@@ -1,10 +1,10 @@
-# -*- coding: utf-8 -*-
__copyright__ = "Copyright 2021, 3Liz"
__license__ = "GPL version 3"
__email__ = "info@3liz.org"
-def classFactory(iface):
+# noinspection PyPep8Naming
+def classFactory(iface): # pylint: disable=invalid-name
_ = iface
- from CenRa_AUTOMAP.CenRa_AutoMap import PgAutoMap
+ from CenIsere_AUTOMAP.CenIsere_AutoMap import PgAutoMap
return PgAutoMap()
diff --git a/CenIsere_AUTOMAP/about_form.py b/CenIsere_AUTOMAP/about_form.py
index 3d9836b..bf9d5f2 100644
--- a/CenIsere_AUTOMAP/about_form.py
+++ b/CenIsere_AUTOMAP/about_form.py
@@ -12,7 +12,7 @@ ABOUT_FORM_CLASS, _ = uic.loadUiType(
os.path.join(
str(Path(__file__).resolve().parent),
'tools/ui',
- 'CenRa_AutoMap_about_form.ui'
+ 'CenIsere_AutoMap_about_form.ui'
)
)
@@ -26,7 +26,7 @@ class AutoMapAboutDialog(QDialog, ABOUT_FORM_CLASS):
self.iface = iface
self.setupUi(self)
- self.viewer.setHtml(devlog('CenRa_AUTOMAP'))
+ self.viewer.setHtml(devlog('CenIsere_AUTOMAP'))
self.rejected.connect(self.onReject)
self.buttonBox.rejected.connect(self.onReject)
@@ -43,4 +43,4 @@ class AutoMapAboutDialog(QDialog, ABOUT_FORM_CLASS):
Run some actions when
the user closes the dialog
"""
- self.close()
\ No newline at end of file
+ self.close()
diff --git a/CenIsere_AUTOMAP/canvas_editor.py b/CenIsere_AUTOMAP/canvas_editor.py
index 887c30a..354bdfe 100644
--- a/CenIsere_AUTOMAP/canvas_editor.py
+++ b/CenIsere_AUTOMAP/canvas_editor.py
@@ -8,7 +8,6 @@ from pathlib import Path
from xml.dom.minidom import parseString
from qgis.gui import *
import qgis
-from importlib import import_module
from qgis.core import (
NULL,
QgsApplication,
@@ -57,7 +56,6 @@ from qgis.PyQt.QtWidgets import (
QTableWidgetItem,
QVBoxLayout,
)
-from PyQt5 import QtGui
from qgis.PyQt.QtXml import QDomDocument
from qgis.utils import iface
import glob
@@ -67,16 +65,12 @@ from .tools.resources import (
login_base,
send_issues,
)
-from .issues import CenRa_Issues
-
-from .tools.mises_en_pages import carto_standard
-from .tools.mises_en_pages import full_page
-from .tools.mises_en_pages import demo
-
+from .tools.mises_en_pages.canvas import (fletch_canvas)
+from .issues import CenIsere_Issues
from datetime import date
-EDITOR_CLASS = load_ui('CenRa_AutoMap_base.ui')
-LOGGER = logging.getLogger('CenRa_AutoMap')
+EDITOR_CLASS = load_ui('CenIsere_AutoMap_base.ui')
+LOGGER = logging.getLogger('CenIsere_AutoMap')
url_osm = 'https://osm.datagrandest.fr/mapcache/?crs=EPSG:2154&featureCount=10&format=image/png&layers=pure&maxHeight=256&maxWidth=256&styles=&url=https://osm.datagrandest.fr/mapcache'
url_ortho = 'http://tiles.craig.fr/ortho/service/?crs=EPSG:2154&featureCount=10&format=image/jpeg&layers=ortho&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/ortho/service'
url_mnt = 'http://tiles.craig.fr/mnt/crs=EPSG:2154&featureCount=10&format=image/png&layers=relief&maxHeight=256&maxWidth=256&styles=&url=http://tiles.craig.fr/mnt'
@@ -104,9 +98,6 @@ data_source = [
'Plan cadastral informatisé - Etalab - juillet 202X',
'Parcellaire Express - IGN - 202X',
]
-A4_size = {'Portrait':{'RIGHT':210,'LEFT':0,'TOP':0,'BOTTOM':297},'Landscape':{'RIGHT':297,'LEFT':0,'TOP':0,'BOTTOM':210}}
-A3_size = {'Portrait':{'RIGHT':298,'LEFT':0,'TOP':0,'BOTTOM':420},'Landscape':{'RIGHT':420,'LEFT':0,'TOP':0,'BOTTOM':298}}
-
class AutoMap_Editor(QDialog, EDITOR_CLASS):
def __init__(self, parent=None):
@@ -115,7 +106,6 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
self.setupUi(self)
self.settings = QgsSettings()
self.s = QSettings()
- self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
path = ''
ix = 0
@@ -139,7 +129,7 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
## On ajoute le nom des templates à la liste déroulante de l'onglet "mises en page" :
mises_en_page = []
- for filename in glob.glob(resources_path("mises_en_pages","*.py")):
+ for filename in glob.glob(resources_path("mises_en_pages","*.qpt")):
mises_en_page.append(filename)
@@ -149,42 +139,32 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
self.comboBox.setCurrentIndex(1)
self.template_parameters = {
- 'Carte_size': None,
- 'Carte_locals' : None,
- 'Carte_rotate':None,
- 'Carte_2_size' : None,
- 'Carte_2_locals' : None,
- 'Carte_2_rotate':None,
- 'Legande_size': None,
- 'Legande_locals': None,
- 'Legande_rotate':None,
- 'Arrow_size': None,
- 'Arrow_locals': None,
- 'Arrow_rotate':None,
- 'Echelle_size': None,
- 'Echelle_locals': None,
- 'Echelle_rotate':None,
- 'Logo_size': None,
- 'Logo_locals': None,
- 'Logo_rotate':None,
- 'Titre_size':None,
- 'Titre_locals':None,
- 'Titre_rotate':None,
- 'Sous_titre_size':None,
- 'Sous_titre_locals':None,
- 'Sous_titre_rotate':None,
- 'Credit_size': None,
- 'Credit_locals': None,
- 'Credit_rotate':None,
- 'Source_size': None,
- 'Source_locals': None,
- 'Source_rotate':None,
- 'Logo_2_size': None,
- 'Logo_2_locals': None,
- 'Logo_2_rotate': None,
- 'Echelle_2_size': None,
- 'Echelle_2_locals': None,
- 'Echelle_2_rotate': None,
+ 'map_size': None,
+ 'map_position' : None,
+ 'position_map_size' : None,
+ 'position_map_position' : None,
+ 'title_position': None,
+ 'title_size': None,
+ 'subtitle_position': None,
+ 'subtitle_size': None,
+ 'logo_position': None,
+ 'logo_size': None,
+ 'legend_position': None,
+ 'legend_size': None,
+ 'scalebarnumeric_position':None,
+ 'scalebarnumeric_size':None,
+ 'scalebar_position': None,
+ 'scalebar_size': None,
+ 'north_position': None,
+ 'north_size': None,
+ 'credit_text_position': None,
+ 'credit_text_size': None,
+ 'credit_text2_position': None,
+ 'credit_text2_size': None,
+ 'image_size':None,
+ 'image_position':None,
+ 'image_size_2':None,
+ 'image_position_2':None,
# Add more variables as needed
}
self.update_logo_library()
@@ -439,15 +419,8 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
doc.setContent(template_content)
self.layout.loadFromTemplate(doc, QgsReadWriteContext(), True)
self.layout.setName(layout_name)
+
- if self.radioButton_6.isChecked() and self.radioButton_7.isChecked():
- logo_div = A4_size['Portrait']['RIGHT']
- if self.radioButton_6.isChecked() and self.radioButton_8.isChecked():
- logo_div = A4_size['Portrait']['BOTTOM']
- if self.radioButton_5.isChecked() and self.radioButton_7.isChecked():
- logo_div = A3_size['Portrait']['RIGHT']
- if self.radioButton_5.isChecked() and self.radioButton_8.isChecked():
- logo_div = A3_size['Portrait']['BOTTOM']
if True:#os.path.basename(filename) == "1. Modèle carto standard (consolidé).qpt":
self.actualisation_mise_en_page()
@@ -460,10 +433,10 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
self.map_modele_test.setExtent(iface.mapCanvas().extent())
# Position de la carte dans le composeur
- self.map_modele_test.setItemRotation(self.template_parameters['Carte_rotate'])
- self.map_modele_test.attemptResize(self.template_parameters['Carte_size'])
- self.map_modele_test.attemptMove(self.template_parameters['Carte_locals'])
+ self.map_modele_test.attemptMove(self.template_parameters['map_position'])
+
# on dimensionne le rendu de la carte (pour référence la page totale est une page A4 donc 297*210)
+ self.map_modele_test.attemptResize(self.template_parameters['map_size'])
self.map_modele_test.setKeepLayerSet(True)
self.map_modele_test.setKeepLayerStyles(True)
if self.radioButton_11.isChecked() == 1:
@@ -477,9 +450,8 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
self.position_map.setExtent(QgsRectangle(641552,6647386, 995856,6331104))
self.position_map.setFollowVisibilityPreset(True)
self.position_map.setFollowVisibilityPresetName(self.comboBox_6.currentText())
- self.position_map.setItemRotation(self.template_parameters['Carte_2_rotate'])
- self.position_map.attemptResize(self.template_parameters['Carte_2_size'])
- self.position_map.attemptMove(self.template_parameters['Carte_2_locals'])
+ self.position_map.attemptMove(self.template_parameters['position_map_position'])
+ self.position_map.attemptResize(self.template_parameters['position_map_size'])
overviewitem = QgsLayoutItemMapOverviewStack(self.position_map)
map_overview = self.position_map.overview()
map_overview.setLinkedMap(self.map_modele_test)
@@ -487,28 +459,45 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
overviewitem.addOverview(map_overview)
self.position_map.refresh()
- self.map_modele_test.setFrameEnabled(True)
+ self.map_modele_test.setFrameEnabled(False)
self.layout.addLayoutItem(self.position_map)
- self.position_map.setId("Carte_locals")
+ self.position_map.setId("carte_position")
self.map_modele_test.refresh()
self.map_modele_test.setBackgroundColor(QColor(255, 255, 255, 255))
- self.map_modele_test.setFrameEnabled(True)
+
+ self.map_modele_test.setFrameEnabled(False)
+
if self.radioButton_9.isChecked() == 1:
self.map_modele_test.setAtlasDriven(True)
self.layout.addLayoutItem(self.map_modele_test)
self.map_modele_test.setId("carte_principale")
+
+ if self.comboBox.currentText() == "3. Modèle carto standard Cen Isere.qpt":
+ # Ajout de la vague haute
+ image1 = QgsLayoutItemPicture(self.layout)
+ image1.setPicturePath(resources_path("mises_en_pages","vague.png"))
+ image1.attemptMove(self.template_parameters['image_position'])
+ image1.attemptResize(self.template_parameters['image_size'])
+ self.layout.addLayoutItem(image1)
+ # Ajout de la vague basse
+ image2= QgsLayoutItemPicture(self.layout)
+ image2.setPicturePath(resources_path("mises_en_pages","vague2.png"))
+ image2.attemptMove(self.template_parameters['image_position_2'])
+ image2.attemptResize(self.template_parameters['image_size_2'])
+ self.layout.addLayoutItem(image2)
+
+
+
## Ajout d'un titre à la mise en page
title = QgsLayoutItemLabel(self.layout)
self.layout.addLayoutItem(title)
titre = layout_name
title.setText(titre)
title.setFont(QFont("Calibri", 15, QFont.Bold))
- title.setItemRotation(self.template_parameters['Titre_rotate'])
- title.attemptResize(self.template_parameters['Titre_size'])
- title.attemptMove(self.template_parameters['Titre_locals'])
-
+ title.attemptMove(self.template_parameters['title_position'])
+ title.attemptResize(self.template_parameters['title_size'])
title.setBackgroundEnabled(True)
title.setBackgroundColor(QColor(255, 255, 255, 130))
self.layout.addItem(title)
@@ -525,9 +514,8 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
titre = titre + ' [%' + self.comboBox_4.currentText() + '%]'
subtitle.setText(titre)
subtitle.setFont(QFont("MS Shell Dlg 2", 10))
- subtitle.setItemRotation(self.template_parameters['Sous_titre_rotate'])
- subtitle.attemptResize(self.template_parameters['Sous_titre_size'])
- subtitle.attemptMove(self.template_parameters['Sous_titre_locals'])
+ subtitle.attemptMove(self.template_parameters['subtitle_position'])
+ subtitle.attemptResize(self.template_parameters['subtitle_size'])
subtitle.setId("SubTitle")
subtitle.setBackgroundEnabled(True)
subtitle.setBackgroundColor(QColor(255, 255, 255, 130))
@@ -540,10 +528,9 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
logo = QgsLayoutItemPicture(self.layout)
logo.setResizeMode(QgsLayoutItemPicture.Zoom)
logo.setMode(QgsLayoutItemPicture.FormatRaster)
- logo.setItemRotation(self.template_parameters['Logo_rotate'])
- logo.setFixedSize(self.template_parameters['Logo_size'])
- logo.attemptMove(self.template_parameters['Logo_locals'])
- logo.setPicturePath(resources_path("icons","CEN_RA.png"))
+ logo.attemptMove(self.template_parameters['logo_position'])
+ logo.setFixedSize(self.template_parameters['logo_size'])
+ logo.setPicturePath(resources_path("icons","CEN.png"))
logo.setId('logo')
self.layout.addLayoutItem(logo)
@@ -618,7 +605,8 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
self.layout.refresh()
legend.updateLegend()
- legend.attemptMove(self.template_parameters['Legande_locals'])
+ legend.attemptMove(self.template_parameters['legend_position'])
+
## Ajout de l'échelle numeric à la mise en page
self.scalebarnumeric_qpt = QgsLayoutItemScaleBar(self.layout)
@@ -630,9 +618,8 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
self.scalebarnumeric_qpt.setNumberOfSegments(2)
self.scalebarnumeric_qpt.setNumberOfSegmentsLeft(0)
- self.scalebarnumeric_qpt.attemptMove(self.template_parameters['Echelle_locals'])
- self.scalebarnumeric_qpt.attemptResize(self.template_parameters['Echelle_size'])
- self.scalebarnumeric_qpt.setItemRotation(self.template_parameters['Echelle_rotate'])
+ self.scalebarnumeric_qpt.attemptMove(self.template_parameters['scalebarnumeric_position'])
+ self.scalebarnumeric_qpt.attemptResize(self.template_parameters['scalebarnumeric_size'])
self.scalebarnumeric_qpt.setAlignment(QgsScaleBarSettings.Alignment(1))
self.scalebarnumeric_qpt.setBackgroundEnabled(True)
self.scalebarnumeric_qpt.setBackgroundColor(QColor(255, 255, 255, 130))
@@ -649,9 +636,8 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
self.scalebar_qpt.setNumberOfSegments(2)
self.scalebar_qpt.setNumberOfSegmentsLeft(0)
- self.scalebar_qpt.attemptMove(self.template_parameters['Echelle_2_locals'])
- self.scalebar_qpt.attemptResize(self.template_parameters['Echelle_2_size'])
- self.scalebar_qpt.setItemRotation(self.template_parameters['Echelle_2_rotate'])
+ self.scalebar_qpt.attemptMove(self.template_parameters['scalebar_position'])
+ self.scalebar_qpt.attemptResize(self.template_parameters['scalebar_size'])
self.scalebar_qpt.setAlignment(QgsScaleBarSettings.Alignment(1))
self.scalebar_qpt.setBackgroundEnabled(True)
self.scalebar_qpt.setBackgroundColor(QColor(255, 255, 255, 130))
@@ -663,47 +649,44 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
north = QgsLayoutItemPicture(self.layout)
north.setPicturePath(resources_path("mises_en_pages","NorthArrow_02.svg"))
self.layout.addLayoutItem(north)
- north.attemptMove(self.template_parameters['Arrow_locals'])
- north.attemptResize(self.template_parameters['Arrow_size'])
- north.setItemRotation(self.template_parameters['Arrow_rotate'])
+ north.attemptMove(self.template_parameters['north_position'])
+ north.attemptResize(self.template_parameters['north_size'])
if self.radioButton_10.isChecked() == 1:
info_text = ["Source : " + self.mComboBox_3.currentText()][0]
else:
info_text = ["Source : " + self.lineEdit_4.text()][0]
# ajout note info:
- info = ["Réalisation : " + "CEN Rhône-Alpes (" + date.today().strftime(
+ info = ["Réalisation : " + "CEN Isère (" + date.today().strftime(
"%d/%m/%Y") + ")"]
credit_text = QgsLayoutItemLabel(self.layout)
credit_text.setText(info[0])
credit_text.setFont(QFont("Calibri", 9))
credit_text.setHAlign(Qt.AlignRight)
credit_text.setVAlign(Qt.AlignVCenter)
+ credit_text.setItemRotation(-90)
credit_text2 = QgsLayoutItemLabel(self.layout)
credit_text2.setText(info_text)
credit_text2.setFont(QFont("Calibri", 9))
credit_text2.setHAlign(Qt.AlignRight)
credit_text2.setVAlign(Qt.AlignVCenter)
- credit_text.setItemRotation(self.template_parameters['Credit_rotate'])
- credit_text.attemptResize(self.template_parameters['Credit_size'])
- credit_text.attemptMove(self.template_parameters['Credit_locals'])
- credit_text2.setItemRotation(self.template_parameters['Source_rotate'])
- credit_text2.attemptResize(self.template_parameters['Source_size'])
- credit_text2.attemptMove(self.template_parameters['Source_locals'])
+ credit_text.attemptMove(self.template_parameters['credit_text_position'])
+ credit_text.attemptResize(self.template_parameters['credit_text_size'])
+ credit_text2.attemptMove(self.template_parameters['credit_text2_position'])
+ credit_text2.attemptResize(self.template_parameters['credit_text2_size'])
self.layout.addLayoutItem(credit_text)
self.layout.addLayoutItem(credit_text2)
## Ajout du logo credit en bas à droit de la page
- len_item = (len(self.mComboBox_4.checkedItems()))
for logo_run in self.mComboBox_4.checkedItems():
logo_credit = QgsLayoutItemPicture(self.layout)
logo_credit.setResizeMode(QgsLayoutItemPicture.Zoom)
logo_credit.setMode(QgsLayoutItemPicture.FormatRaster)
- cur_x = self.template_parameters['Logo_2_locals'].x()
- logo_credit.attemptMove(self.template_parameters['Logo_2_locals'])
+ cur_x = self.template_parameters['logo_credit_position'].x()
+ logo_credit.attemptMove(self.template_parameters['logo_credit_position'])
logo_credit.setPictureAnchor(4)
- self.template_parameters['Logo_2_locals'].setX(cur_x+(logo_div/len_item))
- logo_credit.setFixedSize(self.template_parameters['Logo_2_size'])
+ self.template_parameters['logo_credit_position'].setX(cur_x+51)
+ logo_credit.setFixedSize(self.template_parameters['logo_credit_size'])
if logo_run[0] == ' ':
logo_credit.setPicturePath(self.s.value("automap/logoteck", 1, type=str)+logo_run[1:])
else:
@@ -739,6 +722,10 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
self.close()
def actualisation_mise_en_page(self):
+
+ A4_size = {'Portrait':{'RIGHT':210,'LEFT':0,'TOP':0,'BOTTOM':297},'Landscape':{'RIGHT':297,'LEFT':0,'TOP':0,'BOTTOM':210}}
+ A3_size = {'Portrait':{'RIGHT':298,'LEFT':0,'TOP':0,'BOTTOM':420},'Landscape':{'RIGHT':420,'LEFT':0,'TOP':0,'BOTTOM':298}}
+
values_page = self.comboBox.currentText()
if self.radioButton_6.isChecked() and self.radioButton_7.isChecked():
@@ -757,24 +744,19 @@ class AutoMap_Editor(QDialog, EDITOR_CLASS):
pc = self.layout.pageCollection()
pc.pages()[0].setPageSize('A3', QgsLayoutItemPage.Landscape)
- if values_page == "demo.py":
- self.template_parameters = demo.fletch_canvas(self)
- if values_page == "carto_standard.py":
- self.template_parameters = carto_standard.fletch_canvas(self)
- if values_page == "full_page.py":
- self.template_parameters = full_page.fletch_canvas(self)
+ self.template_parameters = fletch_canvas(self,values_page)
def bar_echelle_auto(self, echelle, bar_echelle):
if True:
- if echelle.scale() >= 40000:
+ if echelle.scale() >= 20000:
bar_echelle.setUnits(QgsUnitTypes.DistanceKilometers)
bar_echelle.setUnitLabel("km")
- bar_echelle.setUnitsPerSegment(round((echelle.scale()*0.04)/1000))
+ bar_echelle.setUnitsPerSegment(round((echelle.scale()*0.02)/1000))
else:
bar_echelle.setUnits(QgsUnitTypes.DistanceMeters)
bar_echelle.setUnitLabel("m")
- bar_echelle.setUnitsPerSegment(round(echelle.scale()*0.04))
+ bar_echelle.setUnitsPerSegment(round(echelle.scale()*0.02))
bar_echelle.update()
diff --git a/CenIsere_AUTOMAP/issues.py b/CenIsere_AUTOMAP/issues.py
index 92a4176..19cfab7 100644
--- a/CenIsere_AUTOMAP/issues.py
+++ b/CenIsere_AUTOMAP/issues.py
@@ -39,9 +39,9 @@ from .tools.resources import (
send_issues,
)
-EDITOR_CLASS = load_ui('CenRa_IssuesSend.ui')
+EDITOR_CLASS = load_ui('CenIsere_IssuesSend.ui')
-class CenRa_Issues(QDialog, EDITOR_CLASS):
+class CenIsere_Issues(QDialog, EDITOR_CLASS):
def __init__(self, parent=None):
_ = parent
diff --git a/CenIsere_AUTOMAP/metadata.txt b/CenIsere_AUTOMAP/metadata.txt
index e0b57ef..6ff3623 100644
--- a/CenIsere_AUTOMAP/metadata.txt
+++ b/CenIsere_AUTOMAP/metadata.txt
@@ -3,12 +3,12 @@
# This file should be included when you package your plugin.# Mandatory items:
[general]
-name=CenRa_AutoMap
+name=CenIsere_AutoMap
qgisMinimumVersion=3.0
-description=CenRa_AutoMap
-version=1.7
+description=CenIsere_AutoMap
+version=1.6
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
-email=si_besoin@cen-rhonealpes.fr
+
about=Outils de création de mise en page prédéfinis pour simplifier et organiser cette étape.
@@ -21,7 +21,7 @@ tracker=https://gitea.cenra-outils.org/api/v1/repos/CEN-RA/Plugin_QGIS/issues
hasProcessingProvider=no
# Uncomment the following line and add your changelog:
-changelog=CenRa_AutoMap:
21/10/2024 - Version 1.7:
- Epurations du code.
07/10/2024 - Version 1.6:
- Option de bibliotheque de logo custome.03/10/2024 - Version 1.5:
- Remonte la fênetre dans la pille. - Gestion du nombre de colonne dans la légend.02/10/2024 - Version 1.4:
- Mise en page plein écrant.01/10/2024 - Version 1.3:
- Récupération du titre et sous-titre pour mise en page existente. - Integration de bibliotheque de logo. - Integration de gestionaire pour les source de donnée. - Mise en place d'une bar d'echelle adaptative. 30/09/2024 - Version 1.2:
- Activation du thème. - Ajouter une carte de suivie. 27/09/2024 - Version 1.1:
- Ajout d'une liste déroulante pour les sources de données. - Bouton pour ajouter des fonts de carte customisés. - Fonctionnalité de génération d'atlas. 26/09/2024 - Version 1.0:
- Lancement du plugin CenRa_AutoMap avec une seul mise en page.
+changelog=CenIsere_AutoMap:
07/10/2024 - Version 1.6:
- Option de bibliotheque de logo custome.03/10/2024 - Version 1.5:
- Remonte la fênetre dans la pille. - Gestion du nombre de colonne dans la légend.02/10/2024 - Version 1.4:
- Mise en page plein écrant.01/10/2024 - Version 1.3:
- Récupération du titre et sous-titre pour mise en page existente. - Integration de bibliotheque de logo. - Integration de gestionaire pour les source de donnée. - Mise en place d'une bar d'echelle adaptative. 30/09/2024 - Version 1.2:
- Activation du thème. - Ajouter une carte de suivie. 27/09/2024 - Version 1.1:
- Ajout d'une liste déroulante pour les sources de données. - Bouton pour ajouter des fonts de carte customisés. - Fonctionnalité de génération d'atlas. 26/09/2024 - Version 1.0:
- Lancement du plugin CenIsere_AutoMap avec une seul mise en page.
# Tags are comma separated with spaces allowed
tags=python
@@ -41,7 +41,7 @@ deprecated=False
# plugin_dependencies=
Category of the plugin: Raster, Vector, Database or Web
-# category=cenra,mise en page,atlas
+# category=CenIsere,mise en page,atlas
# If the plugin can run on QGIS Server.
server=False
diff --git a/CenIsere_AUTOMAP/tools/__pycache__/resources.cpython-310.pyc b/CenIsere_AUTOMAP/tools/__pycache__/resources.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..61a353d33219ec1d83947a4c9e60cbde65c014cf
GIT binary patch
literal 5876
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
literal 0
HcmV?d00001
diff --git a/CenIsere_AUTOMAP/tools/icons/CEN.png b/CenIsere_AUTOMAP/tools/icons/CEN.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d9f1e384d9355ff9ff829cf842fca4ec00def14
GIT binary patch
literal 157525
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