[general]
name=ParcelFlux
qgisMinimumVersion=3.28
qgisMaximumVersion=4.99
description=Subdivide zoning blocks into parcels with minimum-frontage, depth and corner rules, width variation, row asymmetry, fishbone offset, and automatic residual merging.
version=0.3.0
author=Yusuf Eminoglu
email=yusuf.eminoglu@deu.edu.tr

about=ParcelFlux automates the subdivision of zoning blocks into parcels with natural variation. It supports single/double-row detection, minimum street frontage, explicit front-row depth and corner-plot widening, row-width asymmetry for differentiated front/rear facades, fishbone-style organic boundary offsets, H-line shift for asymmetric depth, and 3-pass automatic merging of residual fragments. Output is complete by construction: parcels that exceed the maximum area are split further, and anything still outside the envelope is kept and flagged rather than deleted, with a coverage report after every run. Results can be previewed before they are added, and four seeded layouts can be compared side by side. Developed at Dokuz Eylul University, Department of City and Regional Planning.

tracker=https://github.com/YusufEminoglu/parcelflux/issues
repository=https://github.com/YusufEminoglu/parcelflux
homepage=https://github.com/YusufEminoglu/parcelflux

category=Vector
tags=planx,qgis,parcel,subdivision,urban planning,settlement,dock
icon=icons/parcelflux.png

experimental=False
deprecated=False
hasProcessingProvider=no
license=GPL-3

changelog=
    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.
