[general]
name=ParcelFlux
qgisMinimumVersion=3.28
qgisMaximumVersion=4.99
description=Subdivide zoning blocks into parcels that look planned, not mechanical: minimum frontage, depth and corner rules, natural width variation, row asymmetry, fishbone offsets and residual merging.
version=0.3.7
author=Geophilo
email=yusuf.eminoglu@deu.edu.tr

about=ParcelFlux turns zoning blocks into parcel layouts with the variation real plots have. It detects single and double rows, respects minimum street frontage, front-row depth and corner widening, varies widths and rear lines for differentiated facades, and offsets boundaries in a fishbone pattern for organic layouts.
    Output is complete by construction: oversized parcels are split again, residual fragments are merged in three passes, and anything outside the limits is kept and flagged instead of deleted, with a coverage report after every run. Preview before adding, and compare four seeded layouts side by side.
    Manual: https://geophilo.com/parcelflux/manual.html

tracker=https://gitlab.com/geophilo1/parcelflux/-/issues
repository=https://gitlab.com/geophilo1/parcelflux
homepage=https://geophilo.com/parcelflux/

category=Vector
tags=planx,parcel,subdivision,urban planning,settlement,plot layout,block subdivision,geophilo
icon=icons/icon.png

experimental=False
deprecated=False
hasProcessingProvider=no
license=GPL-3.0-or-later
changelog=
    0.3.7 - Help opens the online guide on geophilo.com instead of a copy bundled in the plugin package; the plugin no longer ships documentation HTML.
    0.3.6 - Hub listing text rewritten; author Geophilo; university affiliation removed; documentation links use the standard geophilo.com pages (manual.html, guide/); manual HTML no longer ships in the plugin package.
    0.3.5 - Upgraded official plugin icon to high-end tactile 3D brand identity with circular teal pedestal; synchronized documentation, repository and issue tracker endpoints to GeoPhilo and GitLab.
    0.3.1 - Palette-aware adaptive theme.
        Changed: replace every hardcoded colour in the dock, seed gallery, guide and about HTML with palette-derived tokens so the entire UI stays readable under QGIS light, dark and high-contrast themes while keeping the ParcelFlux green accent identity.
        Added: theme.py module with WCAG contrast-ratio checks, palette-aware colour tokens, and a single apply_adaptive_theme() entry point; the dock now listens for PaletteChange and re-applies the theme automatically when the user switches themes.
    0.3.0 - Complete, verifiable subdivision.
        Fix: oversized parcels are no longer deleted from the output. max_area used to filter them out, punching holes into the block; with the default 2000 m2 limit a whole block could produce zero parcels and vanish without a message. Oversized parcels are now bisected across their long axis until they fit, and anything that still cannot fit is kept and flagged. Output area now equals input area.
        Fix: slivers are merged into a neighbour instead of being discarded at write time.
        Fix: plugin unload no longer leaves an orphan toolbar behind on reload.
        Added: minimum street frontage, explicit front-row parcel depth, and corner-plot widening constraints.
        Added: pf_flag output column marking oversize, undersize and narrow parcels, so a plan is never quietly incomplete.
        Added: quality report after every run - parcel and block counts, coverage percentage, area min/mean/median/max, mean frontage, merge and re-split counts.
        Added: preview before adding, with Apply and Discard.
        Added: seed comparison - run four seeds and pick a layout from rendered thumbnails.
        Quality: first automated test suite (17 engine checks, 16 dock and lifecycle checks), passing on QGIS 3.44 LTR and QGIS 4.2.
    0.2.13 - Fix: splitwithlines hang on irregular blocks. The v0.2.10 change (split real geometry instead of OBB) caused native:splitwithlines to freeze on complex concave blocks when division lines didn't align with high-vertex-count boundaries. Now splits the OBB (fast 4-vertex rectangle) and clips parcels back to the real block footprint — same accurate output, no hang.
    0.2.12 - Add wd_ratio facade column; replace random.Random with self-contained LCG (bandit B311).
    0.2.11 - CITATION.cff Zenodo DOI integration.
    0.2.10 - Fix: irregular and repaired blocks are now subdivided inside their real block geometry; OBB is used only as a layout guide, preventing parcels from expanding to the block bounding box.
    0.2.9 - Fix: core now rejects missing or invalid CRS inputs and preserves the source CRS on all temporary and output memory layers, including custom CRS definitions.
    0.2.8 - Fix: core now rejects invalid layers and unsafe parameter ranges up front, returns clear validation errors, and passes cancellation-aware feedback into native QGIS Processing steps.
    0.2.7 - Fix: core processing now honors cooperative cancellation checkpoints between processing stages and large geometry loops, returning Cancelled before adding output.
    0.2.6 - Fix: cancel and plugin unload no longer use unsafe QThread.terminate(); running jobs now request cancellation, discard late results, and detach safely during plugin shutdown.
    0.2.5 - Added: facade columns now contain computed exterior frontage length, side frontage, rear-edge proxy, exterior facade count, corner flag, and cardinal front direction instead of empty placeholders.
    0.2.4 - Fix: plugin unload now removes toolbar/menu/actions cleanly, the first panel toggle reliably shows the dock, and the worker completion signal no longer shadows QThread.finished.
    0.2.3 - Fix: single-row blocks no longer receive an unwanted centerline split. Irregular/invalid polygons are now split on their repaired OBB geometry, residual merge counting is accurate, max_area=0 disables the upper area filter, generated output field names avoid collisions, and a Hub-safe PNG icon is bundled.
    0.2.1 - Fix: invalid-geometry crash. OBB step no longer aborts when the user's global Processing "Invalid features filtering" is set to Stop. All processing.run() calls now use a private context with SkipInvalid; irregular blocks are pre-fixed via native:fixgeometries before OBB; self-intersecting "regular-looking" blocks are routed through the repair path too.
    0.2.0 - Fix: polygon layer selection (layer combo now correctly lists polygon layers; previous filter blocked them). UI: full tabbed redesign (Run / Guide / About), in-panel rich guide, slider+spinbox controls, configurable random seed with re-roll, selected-features-only mode, projected-CRS guard with explicit error, status banner, reset-to-defaults.
    0.1.1 - English-only UI, optional id/facade columns, QGIS 3/4 compatibility, HTML guide.
    0.1.0 - Initial dock-based release.
