wolfhece.pyvertexvectors._zones =============================== .. py:module:: wolfhece.pyvertexvectors._zones .. autoapi-nested-parse:: GUI-enabled Zones class with wx.Frame, OpenGL, and treelist UI. Module Contents --------------- .. py:class:: Zones(filename: Union[str, pathlib.Path] = '', ox: float = 0.0, oy: float = 0.0, tx: float = 0.0, ty: float = 0.0, parent=None, is2D=True, idx: str = '', colname: str = None, plotted: bool = True, mapviewer=None, need_for_wx: bool = False, bbox: shapely.geometry.Polygon = None, find_minmax: bool = True, shared: bool = False, colors: dict = None) Bases: :py:obj:`wolfhece.pyvertexvectors._models.ZonesModel`, :py:obj:`wx.dataview.wx.Frame`, :py:obj:`wolfhece.drawing_obj.Element_To_Draw` .. autoapi-inheritance-diagram:: wolfhece.pyvertexvectors._zones.Zones :parts: 1 :private-bases: Objet de gestion d'informations vectorielles Une instance 'Zones' contient une liste de 'zone' Une instance 'zone' contient une listde de 'vector' (segment, ligne, polyligne, polygone...) .. py:attribute:: tx :type: float .. py:attribute:: ty :type: float .. py:attribute:: myzones :type: list[wolfhece.pyvertexvectors._zone.zone] .. py:attribute:: treelist :type: TreeListCtrl .. py:attribute:: xls :type: wolfhece.CpGrid.CpGrid .. py:attribute:: shared :value: False .. py:attribute:: parent :value: None .. py:attribute:: labelactvect :value: None .. py:attribute:: labelactzone :value: None .. py:attribute:: _wx_frame_initialized :value: False .. py:attribute:: _rendering_machine :value: None .. py:method:: _make_zone(**kwargs) Factory: create a new GUI-enabled zone. .. py:method:: _make_zones(**kwargs) Factory: create a new GUI-enabled Zones collection. .. py:method:: _make_vector(**kwargs) Factory: create a new GUI-enabled vector. .. py:method:: find_nearest_vertex(x: float, y: float) -> wolfhece.PyVertex.wolfvertex | None Return the nearest vertex across all GUI zones. .. py:method:: find_nearest_vector(x: float, y: float) -> wolfhece.pyvertexvectors._vector.vector | None Return the nearest GUI vector across all GUI zones. .. py:method:: import_gdb(fn: str, bbox: shapely.geometry.Polygon = None, layers: list[str] = None, colname: str = None, value_columns: str | list[str] | tuple[str, Ellipsis] | None = None, share_multipart_values: bool = False) Import a GDB file, showing a wx layer dialog when available. :param fn: Path to the GDB file. :param bbox: Optional bounding box to filter features. :param layers: Layer names to import (None = wx dialog or all). :param colname: Column name used to build zone names. :param value_columns: Columns to store into vector properties. :param share_multipart_values: If True, multipart geometries share the same underlying ``_values`` dictionary across split vectors. .. py:method:: import_gpkg(fn: str, bbox: shapely.geometry.Polygon = None, layers: list[str] = None, colname: str = None, value_columns: str | list[str] | tuple[str, Ellipsis] | None = None, share_multipart_values: bool = False) Import a GeoPackage file, showing a wx layer dialog when available. :param fn: Path to the GPKG file. :param bbox: Optional bounding box to filter features. :param layers: Layer names to import (None = wx dialog or all). :param colname: Column name used to build zone names. :param value_columns: Columns to store into vector properties. :param share_multipart_values: If True, multipart geometries share the same underlying ``_values`` dictionary across split vectors. .. py:method:: Onsaveimages(event: wx.dataview.wx.MouseEvent) Enregistrement d'une image pour tous les vecteurs .. py:method:: save_images_fromvec(dir='') Sauvegarde d'images des vecteurs dans un répertoire FIXME : pas encore vraiment au point .. py:method:: change_gui(parent) Change the parent GUI object (e.g. mapviewer) and propagate to zones and vectors. .. py:method:: set_mapviewer() Recherche d'une instance WolfMapViewer depuis le parent .. py:method:: Activate_vector(object: wolfhece.pyvertexvectors._vector.vector) Mémorise l'objet passé en argument comme vecteur actif Pousse la même information dans l'objet parent s'il existe .. py:method:: Activate_zone(object: wolfhece.pyvertexvectors._zone.zone) Mémorise l'objet passé en argument comme zone active Pousse la même information dans l'objet parent s'il existe .. py:method:: show_properties(parent=None, forceupdate=False) Affichage des propriétés des zones :param parent: soit une instance 'WolfMapViewer', soit une instance 'Ops_Array' --> est utile pour transférer la propriété 'active_vector' et obtenir diverses informations si parent est d'un autre type, il faut s'assurer que les options/actions sont consistantes :param forceupdate: si True, on force la mise à jour de la structure .. py:method:: hide_properties() Hide the properties window .. py:method:: _callback_prop() Callback invoked when global properties are applied to all vectors. .. py:method:: _callback_destroy_props() Callback to release the global properties dialog reference. .. py:method:: _edit_all_properties() Show properties of the zone --> will be applied to all vectors int he zone .. py:property:: rendering_machine Current rendering backend for all zones. :rtype: VectorOGLRenderer .. py:method:: reset_listogl() Reset des listes OpenGL pour toutes les zones .. py:method:: prep_listogl() Préparation des listes OpenGL pour augmenter la vitesse d'affichage .. py:method:: plot_matplotlib(ax: matplotlib.axes.Axes | tuple[matplotlib.figure.Figure, matplotlib.axes.Axes] = None, background: Literal['ORTHO_1971', 'ORTHO_1994_2000', 'ORTHO_2006_2007', 'ORTHO_2009_2010', 'ORTHO_2012_2013', 'ORTHO_2015', 'ORTHO_2016', 'ORTHO_2017', 'ORTHO_2018', 'ORTHO_2019', 'ORTHO_2020', 'ORTHO_2021', 'ORTHO_2022_PRINTEMPS', 'ORTHO_2022_ETE', 'ORTHO_2023_ETE', 'ORTHO_LAST', 'orthoimage_coverage', 'orthoimage_coverage_2016', 'orthoimage_coverage_2017', 'orthoimage_coverage_2018', 'orthoimage_coverage_2019', 'orthoimage_coverage_2020', 'orthoimage_coverage_2021', 'orthoimage_coverage_2022', 'crossborder', 'crossborder_grey', 'overlay', 'topo', 'topo_grey'] = None, xlim: tuple[float] | None = None, ylim: tuple[float] | None = None) -> tuple[matplotlib.figure.Figure, matplotlib.axes.Axes] Plot all zones using Matplotlib with optional WMS background. :param ax: Matplotlib Axes, ``(Figure, Axes)`` tuple, or None. :param background: WMS background layer name (WalOnMap, IGN or Cartoweb). :param xlim: Optional ``(xmin, xmax)`` limits. :param ylim: Optional ``(ymin, ymax)`` limits. :return: ``(Figure, Axes)`` tuple. .. py:method:: Onplotmpl(event: wx.dataview.wx.MouseEvent) Plot active vector in matplotlib .. py:method:: Onplotmplsz(event: wx.dataview.wx.MouseEvent) Plot active vector in matplotlib with sz values .. py:method:: OnClose(e) Fermeture de la fenêtre .. py:method:: showstructure(parent=None, forceupdate=False) Affichage de la structure des zones :param parent: soit une instance 'WolfMapViewer', soit une instance 'Ops_Array' --> est utile pour transférer la propriété 'active_vector' et obtenir diverses informations si parent est d'un autre type, il faut s'assurer que les options/actions sont consistantes :param forceupdate: si True, on force la mise à jour de la structure .. py:method:: init_ui() Création de l'interface wx de gestion de l'objet .. py:method:: fill_structure() Remplissage de la structure wx .. py:method:: expand_tree(objzone=None) Développe la structure pour un objet spécifique stocké dans la self.treelist. L'objet peut être une 'zone' ou un 'vector' --> see more in 'fill_structure'. .. py:method:: OnCheckItem(event: wx.dataview.wx.MouseEvent) Coche/Décoche un ékement de la treelist .. py:method:: OnRDown(event: TreeListEvent) Affiche les propriétés du vecteur courant Clicl-droit .. py:method:: OnActivateItem(event: TreeListEvent) Activation d'un élément dans le treelist .. py:method:: OnEditLabel(event: wx.dataview.wx.MouseEvent) Edition de la clé/label de l'élément actif du treelist .. py:method:: xls_active_vector() Remplit le tableur .. py:method:: Onaddrows(event: wx.dataview.wx.MouseEvent) Ajout de lignes au tableur .. py:method:: Onupdatevertices(event) Mie à jour des vertices sur base du tableur .. py:method:: Ontest_interior(event: wx.dataview.wx.MouseEvent) Test if the active vector has interior portions .. py:method:: OnClickadd_zone(event: wx.dataview.wx.MouseEvent) Ajout d'une zone au GUI .. py:method:: OnClickadd_vector(event: wx.dataview.wx.MouseEvent) Ajout d'un vecteur à la zone courante .. py:method:: OnClickduplicate_zone(event: wx.dataview.wx.MouseEvent) Duplication de la zone active .. py:method:: OnClickduplicate_vector(event: wx.dataview.wx.MouseEvent) Duplication du vecteur actif .. py:method:: OnClickdelete_zone(event: wx.dataview.wx.MouseEvent) Suppression de la zone courante .. py:method:: OnClickdelete_vector(event: wx.dataview.wx.MouseEvent) Suppression du vecteur actif .. py:method:: delete_zone(zone_to_del: wolfhece.pyvertexvectors._zone.zone, update_ui: bool = True) Delete a zone from this Zones. :param zone: Zone to delete :param update_ui: if `True` reflects the deleteion in the user interface. .. py:method:: delete_all_zones() Delete all zone's from this Zones. .. py:method:: OnClickup_vector(event: wx.dataview.wx.MouseEvent) Remonte le vecteur actif dans la liste de la zone .. py:method:: OnClickdown_vector(event: wx.dataview.wx.MouseEvent) Descend le vecteur actif dans la liste de la zone .. py:method:: OnClickup_zone(event: wx.dataview.wx.MouseEvent) Remonte la zone active dans la liste de la zones self .. py:method:: OnClickdown_zone(event: wx.dataview.wx.MouseEvent) Descend la zone active dans la liste de la zones self .. py:method:: OnClickfindactivate_vector(event: wx.dataview.wx.MouseEvent) Recherche et activation d'un vecteur dans toutes les zones .. py:method:: OnClickfindactivate_vector2(event: wx.dataview.wx.MouseEvent) Recherche et activation d'un vecteur dans la zone courante .. py:method:: Oncapture(event: wx.dataview.wx.MouseEvent) Ajoute de nouveaux vertices au vecteur courant Fonctionne par clicks souris via le GUI wx de WolfMapViewer .. py:method:: Onmodify(event: wx.dataview.wx.MouseEvent) Permet la modification interactive de vertex dans le vector actif Premier click : recherche du vertex le plus proche Second click : figer la nouvelle position --> action active jusqu'à sélectionne une autre action ou touche Entrée .. py:method:: OncaptureandDynapar(event: wx.dataview.wx.MouseEvent) Ajoute des vertices au vecteur courant et crée des parallèles gauche-droite .. py:method:: Oninsert(event: wx.dataview.wx.MouseEvent) Insertion de vertex dans le vecteur courant .. py:method:: Onzoom(event: wx.dataview.wx.MouseEvent) Zoom sur le vecteur actif dans le mapviewer .. py:method:: Onzoomvertex(event: wx.dataview.wx.MouseEvent) Zoom sur le vertex actif dans le mapviewer .. py:method:: OnMove(event: wx.dataview.wx.MouseEvent) Déplacement du vecteur actif .. py:method:: OnMoveZone(event: wx.dataview.wx.MouseEvent) Déplacement de la zone active .. py:method:: OnRotate(event: wx.dataview.wx.MouseEvent) Rotation du vecteur actif .. py:method:: OnRotateZone(event: wx.dataview.wx.MouseEvent) Rotation de la zone active .. py:method:: reverse(inplace: bool = True) -> Zones Reverse the order of vertices in all vectors. :param inplace: If True, modify in place; otherwise return a copy. :return: The reversed Zones object. .. py:method:: OnReverse(event: wx.dataview.wx.MouseEvent) Renverse le vecteur courant .. py:method:: Onsimplify(event: wx.dataview.wx.MouseEvent) Simplify the active vector using the Douglas-Peucker algorithm .. py:method:: OnAddPar(event: wx.dataview.wx.MouseEvent) Ajout d'une parallèle au vecteur courant via le bouton adhoc .. py:method:: Onsascending(e: wx.dataview.wx.MouseEvent) S'assure que les points sont ordonnés avec une distance 2D croissante Retourne un message avec les valeurs modifiées le cas échéant .. py:method:: Onbuffer(e: wx.dataview.wx.MouseEvent) Create a buffer around the currently activated vector. The buffer replaces the active vector in the same zone. .. py:method:: Onsplit(event: wx.dataview.wx.MouseEvent) Split le vecteur courant selon un pas spatial déterminé .. py:method:: Onsurface(e: wx.dataview.wx.MouseEvent) Calcul de la surface du vecteur actif .. py:method:: Oncreatepolygons(event: wx.dataview.wx.MouseEvent) Création de polygones depuis des paralèles contenues dans la zone active .. py:method:: _OnCreatePolygons(event: wx.dataview.wx.MouseEvent, ds_text: wx.dataview.wx.TextCtrl, nb_text: wx.dataview.wx.TextCtrl, option_dialog: wx.dataview.wx.Dialog) Handle the creation of polygons based on user input from the dialog. .. py:method:: Oncreateslidingpoly(event: wx.dataview.wx.MouseEvent) Create sliding polygons from a support vector .. py:method:: _OnCreateSlidingPolygon(event, ds_text, sliding_text, farthest_text, interval_text, inter_checkbox, offset_text, separate_checkbox, option_dialog: wx.dataview.wx.Dialog) Handle the creation of sliding polygons based on user input from the dialog. .. py:method:: Oncreate_cs_from_active_zone(event: wx.dataview.wx.MouseEvent) Create a cross-section for each vector from the active zone. .. py:method:: Oncreatebin(event: wx.dataview.wx.MouseEvent) Création d'un canal sur base de 3 parallèles .. py:method:: Oncreatemultibin(event: wx.dataview.wx.MouseEvent) Création d'une triangulation sur base de plusieurs vecteurs .. py:method:: Oncreatetricrosssection(event: wx.dataview.wx.MouseEvent) Create a tringulation like cross-sections and support vectors .. py:method:: OnconstrainedDelaunay(event: wx.dataview.wx.MouseEvent) Create a constrained Delaunay triangulation from the active zone .. py:method:: Oncreatemultibin_project(event: wx.dataview.wx.MouseEvent) Création d'une triangulation sur base de plusieurs vecteurs Les sommets sont recherchés par projection d'un vecteur sur l'autre .. py:method:: get_xy_from_sz(event: wx.dataview.wx.Event) Add vertices and their respectives xy coordinates from s and Z entries in the xls grid: - NB: The coordinates of the initial point s= 0 and one other points should be explicitly given in the xls grid. .. py:method:: Ongetvalues(e: wx.dataview.wx.MouseEvent) Récupère les valeurs dans une matrice --> soit la matrice courante --> soit la matrice active de l'interface parent .. py:method:: Ongetvalueslinked(e: wx.dataview.wx.MouseEvent) Récupération des valeurs sous toutes les matrices liées pour le vecteur actif Crée une nouvelle zone contenant une copie du vecteur Le nombre de vertices est conservé .. py:method:: Ongetvalueslinkedandref(e: wx.dataview.wx.MouseEvent) Récupération des valeurs sous toutes les matrices liées pour le vecteur actif Crée une nouvelle zone contenant une copie du vecteur. Le nombre de vertices est adapté pour correspondre au mieux à la matrice de liée et ne pas perdre, si possible, d'information. .. py:method:: Onevaluates(event: wx.dataview.wx.MouseEvent) Calcule la position curviligne du vecteur courant Le calcul peut être mené en 2D ou en 3D Remplissage du tableur dans la 5ème colonne .. py:method:: Onupdate_from_sz_support(event: wx.dataview.wx.MouseEvent) Update the active vector from the sz values in the xls grid .. py:method:: update_from_sz_support(vec: wolfhece.pyvertexvectors._vector.vector, sz: numpy.ndarray, dialog_box=True, method: Literal['2D', '3D'] = '3D') Update the coordinates from the support vector and a sz array. The support vector is used to interpolate the z values, at the s values. It must long enough to cover the s values. :param vec: The vector to update. It is also the support vector. :param sz: The sz array to use for the update :param dialog_box: If True, a dialog box will be shown to choose the method :param method: The method to use for the interpolation. '2D' or '3D' .. py:method:: evaluate_s(vec: wolfhece.pyvertexvectors._vector.vector = None, dialog_box=True) Compute the curvilinear abscissa for a vector. :param vec: The vector to evaluate. :param dialog_box: If True, show a wx dialog for 2-D/3-D choice. .. py:method:: Oninterpvec(event: wx.dataview.wx.MouseEvent) Interpole les valeurs Z de l'éditeur sur base des seules valeurs connues, càd autre que vide ou -99999 .. py:method:: verify_activevec() Vérifie si un vecteur actif est défini, si 'None' affiche un message Return : True if self.active_vector is None False otherwise .. py:method:: verify_activezone() Vérifie si une zone active est définie, si 'None' affiche un message Return : True if self.active_zone is None False otherwise