# This file contains metadata for your plugin.
# This file should be included when you package your plugin.
# Mandatory items:

[general]
name=Stereoplot
qgisMinimumVersion=3.0.0
qgisMaximumVersion=4.99
description=Interactive stereographic projection plotting and analysis tool for QGIS
version=1.0.1
author=Julien Perret (UWA-CET) & Mark Jessell (UWA-CET)
email=julien.perret@uwa.edu.au

about=Displays geologic structural data on equal-area stereonets and rose diagrams.
 Supports:
 - automatic structural data-type detection,
 - density contouring,
 - best-fit girdles,
 - plotting of mean or Kamb maximum orientation,
 - bearing-plane visualisation,
 - kinematic arrows,
 - attribute-based classification,
 - category styling,
 - dynamic filtering using QGIS expressions and by data live selection on plots,
 - interactive category visibility controls.

tracker=https://github.com/swaxi/Stereoplot/issues
repository=https://github.com/swaxi/Stereoplot
# End of mandatory metadata

# Recommended items:

hasProcessingProvider=no
# Uncomment the following line and add your changelog:
changelog=1.0.1
     1.0.1 2026-09
       **Dependency Harmonisation**
       * Harmonised numpy/matplotlib version constraints in Requirements.txt with the GEOL-QMAPS and Geochemistry Plotting Tools plugins (numpy>=1.26.4,<2.0 ; matplotlib>=3.7,<3.12), so installing all three on the same QGIS Python environment converges on one mutually compatible dependency set.
       * Removed the unused scipy entry from Requirements.txt: Stereoplot's plotting and Kamb-contouring code has never imported scipy, so declaring it only created a false version-conflict risk with other plugins.
       * Replaced the README's blanket "do not upgrade numpy/scipy/matplotlib" warning with the actual tested version ranges, since it contradicted the version floors declared by other plugins commonly installed alongside Stereoplot.
       * Verified (no code changes required) that Stereoplot already loads correctly under both Qt5 (QGIS 3.x) and Qt6 (QGIS4).

       **Category Orientation Statistics (Mean / Kamb Maximum)**
       * Added a per-category "Show mean or Kamb maximum orientation" overlay to the interactive category panel:
       ** choice of statistic per plot: spherical (Fisher) mean vector, or the peak of a per-category Kamb density grid (contour maximum)
       ** hidden marker/great-circle/label artists are built once alongside the normal plot, so switching is instant with no re-plotting
       ** individual points are faded behind the overlay, with adjustable background opacity
       ** for linear data,  the pole can be labelled "\<plunge\-->/\<trend\>"
       ** for planar data, the corresponding great circle is now plotted alongside the pole, labelled "Pole to \<strike\>/\<dip\>".
       ** for lineations with bearing planes, the user has to select if statistics must be run on the linear or planar data.for planar data, the corresponding great circle is plotted alongside the pole, and its label reads "Pole to <strike>/<dip>"
       ** optional on-plot text label, with user-selectable font family and size, defaulting to the category's own symbol colour with a white background mask for legibility over other plot elements

       **Category Styling**
       * Added a hollow/full symbol fill option (white fill with a coloured outline, or a solid coloured fill) to the per-category style editor.
       * Added a per-category drawing (z-stack) order control, so any category's points, mean/Kamb-maximum overlay, and legend entry can be brought to the front or sent to the back.

       **Interactive Layer Filtering**
       * Added "Filter Layer to Selected" and "Clear Filter" buttons directly to the interactive category panel.
       * "Filter Layer to Selected" turns the current plot selection (lasso, click, or shift-click) into a QGIS layer subset filter, and automatically regenerates the plot so it shows only the filtered entities.
       * "Clear Filter" removes the filter and restores the layer(s) used in the plot.

       **Orientation Measurement Field Assignement (Settings)**
       * Fixed Stereoplot failing to recognise selected entities as plottable the first time the plugin was used, i.e. when clicking Plot before ever opening Settings and clicking Update Settings once; the auto-detected data type is now used correctly even before any settings have been saved.
       * Added an "Orientation Measurement Field Assignement" panel to the Settings dialog, letting users manually assign the Strike (Right-Hand Rule), Dip Direction, Dip, Trend/Azimuth and Plunge fields when a layer's fields are not picked up by the built-in auto-detection dictionaries.
       ** dropdowns are restricted to numeric fields and display field aliases (when defined) rather than raw field names;
       ** fields resolved automatically are shown as "Auto-detect (\<field\>)"; fields with no automatic match are flagged in bold red as "Not detected, to be assigned";
       ** for planar data, only one of Strike (Right-Hand Rule) or Dip Direction needs to be assigned, since the other is derived automatically.
       * Fixed auto-detection and manual field assignment for Strike/Dip Direction/Dip so they correctly resolve against the reference-plane fields (Strike_ref/DipDir_ref/Dip_ref) in "Lineations with Bearing Planes" mode, instead of only checking against the plain planar fields.
       * Removed the unused `mplstereonet` entry from `Requirements.txt`: Stereoplot always uses its bundled copy of `mplstereonet`, so qpip no longer installs a redundant, unused duplicate.

     1.0.0 2026-06
       **Major Functional Improvements**
       * Added automatic structural data-type detection for:
       ** Planes Only
       ** Lineations Only
       ** Lineations with Bearing Planes
       * Added support for lineation-bearing plane datasets, including:
       ** Strike_ref + Dip_ref
       ** DipDir_ref + Dip_ref
       ** regular Strike/Dip or DipDir/Dip fields stored in combined planar-linear layers
       * Fixed bearing-plane plotting on initial load, removing the need to manually toggle the Lineation-bearing Planes option.
       * Added density contouring for:
       ** poles to planes
       ** lineations
       ** lineations with bearing planes
       * Added a continuous Modified Kamb sigma-level colour bar for contour plots.
       * Added dynamic contour recalculation when:
       ** categories are toggled on/off
       ** filters are applied
       ** classification settings change
       * Added best-fit girdle plotting and dynamic recalculation based on currently visible data.

       **Kinematic Visualisation**
       * Added kinematic arrow plotting for lineation-bearing plane datasets.
       * Added automatic kinematics field detection based on field names and field values.
       * Added support for common kinematic classes and synonyms, including:
       ** Sinistral / Sinistral-slip / Left-lateral
       ** Dextral / Dextral-slip / Right-lateral
       ** Normal / Normal-slip / Extensional
       ** Reverse / Reverse-slip / Thrust / Compressional
       * Added user-selectable hangingwall displacement arrow position:
       ** Plane pole
       ** Lineation
       * Treated Unknown, Undefined, Undetermined, N/A and equivalent kinematic values as null for arrow plotting.
       * Kinematic arrows are now plotted only for features with valid lineation, kinematic value and associated bearing-plane orientation.

       **Classification and Filtering**
       * Added attribute-based classification using any selected layer attribute field.
       * Added support for field aliases in the classification dropdown.
       * Added dynamic category visibility controls.
       * Added category counts and vector-rendered category legend symbols.
       * Added scrollable category and legend panels for datasets with many categories.
       * Added embedded plot legends for exported figures.
       * Added adaptive multi-column legend layout when the legend would otherwise exceed the stereonet height.
       * Added attribute filtering using native QGIS expressions.

       **Styling and Templates**
       * Added category-specific style editing, including:
       ** symbol shape
       ** symbol colour
       ** symbol size
       ** line colour
       ** line width
       ** transparency
       ** arrow colour
       * Added default style editing when classification is disabled.
       * Added style-template management:
       ** Save
       ** Load
       ** Reset
       ** Delete
       * Added project-level style persistence through stereonet_styles.json.

       **Rose Diagram and Plot Layout**
       * Improved rose-diagram plotting and scaling.
       * Rose Diagram mode is now reset when switching layers to avoid stale settings disabling stereonet tools.
       * Plot tools are now refreshed immediately when Data to plot is changed manually.
       * Added manual override support for plotting DipDir/Dip as Trend/Plunge when Lineations Only mode is selected and no Trend/Plunge fields are available.
       * Improved typography and layout, including Arial font support and better colour-bar spacing.

       **Settings and Robustness**
       * Improved project-level persistence through stereonet.json.
       * Improved QSettings fallback behaviour.
       * Improved handling of stale settings when switching layers.
       * Classification now resets only when switching to a different layer, not when selecting a different subset from the same layer.
       * Improved compatibility with Folds_PT, Lineations_PT and Bedding_PT datasets.


# Tags are comma separated with spaces allowed

tags=Geology, Structural Geology, Stereonet, Stereoplot, Rose Diagram, Lineation, Planes, Kinematics, Contouring, QGIS

homepage=https://github.com/swaxi/stereoplot

category=Plugins
icon=icon.png

# experimental flag
experimental=False

# deprecated flag (applies to the whole plugin, not just a single version)
deprecated=False

# Since QGIS 3.8, a comma separated list of plugins to be installed
# (or upgraded) can be specified.
# Check the documentation for more information.

# plugin_dependencies=

# Category of the plugin: Raster, Vector, Database or Web
# category=

# If the plugin can run on QGIS Server.
server=False
