[general]
name=Raisz-style Relief
qgisMinimumVersion=3.40
qgisMaximumVersion=4.99
description=Presentation-quality relief rendering from a DEM in the style of Erwin Raisz hand-drawn physiographic maps: two algorithms (hybrid landform and classic oblique hachures) with a shared decoration layer - hypsometric or thematic draped fill, overlay layers for waters, roads, settlements, land cover textures, sheet decoration (frames, graticule ticks, scale bar, compass rose) and old-print emulation.
version=7.7.1
author=Maksim Boiko
email= boandch@gmail.com
about=The plugin builds presentation-quality physiographic relief graphics from a DEM (Alpha & Winter 1971; Raisz 1931; oblique view with proportional displacement - Ridd 1963). Contour levels are made invisible; each relief point is shifted north proportionally to its height, so the higher the mountain, the taller its profile; fall lines with light-dependent density and hidden-surface removal by a floating horizon form the correct oblique view. Two algorithms: "Landform map" (a hybrid of Mower-style morphometry and hachures at working resolution with variable plains density) and "Classic physiographic" (full resolution, uniform hachuring, memory control with optional strip tiling). A shared decoration layer (all optional): monochrome sepia paper, hypsometric fill from elevation (Patterson, Bartholomew, Peucker, Imhof palettes) or thematic fill colored from the QGIS layer style; the fill is draped over the displaced relief; separate water layers (rivers, lakes, seas, marshes) drawn in ink on paper presets and in blue on colored fills; roads; settlements with labels; land cover textures; large-form shading (flat shadow or anaglyptography engraving); sheet decoration (frames including a checkered map border, graticule tick labels in D°MM', old-style scale bar, compass rose) and old-print emulation (dot screen, paper grain, color misregistration). Vector layers are reprojected and clipped to the DEM extent automatically. Output - PNG, SVG or PDF. Requires numpy, scipy, matplotlib, rasterio, shapely (>=2.0), pyproj and affine -- all bundled with QGIS/OSGeo4W.
tracker= https://github.com/iwojima-dev/Raisz_relief_QGIS/issues
repository= https://github.com/iwojima-dev/Raisz_relief_QGIS
homepage= https://github.com/iwojima-dev/Raisz_relief_QGIS
category=Raster
icon=resources/icon.png
experimental=False
deprecated=False
supportsQt6=True
changelog=7.7.1 Qt6 compatibility fix: the enums introduced in 7.7.0 now use their scoped forms (QgsProcessingGui.WidgetType.Standard and .Modeler, QgsProcessingParameterDefinition.Flag.FlagOptional), matching the aliases already used elsewhere in the plugin. No functional changes.
 7.7.0 The algorithm dialog is decluttered: 75 of the 85 parameters move into five separate windows opened by "Configure..." buttons -- strokes and light, plains and Hammond classification, fill and paper, decoration layers, sheet decoration and print. The main panel keeps the DEM, contour interval, working size, DPI, output and the scene view settings, which are the ones tuned per DEM. Next to each button a summary line shows what differs from the defaults. Existing parameters are unchanged: instead of one composite parameter, a service button parameter per group edits the values of the ordinary fields, so batch mode, the graphical modeler and calls from scripts keep working as before, and the fields are hidden only in the standard dialog. Fields absent from a given algorithm are not shown, since the classic and landform algorithms have different parameter sets. The current selection is also written into the help panel on the right.
 7.6.1 Watercolour styling of the fill (off by default, one strength parameter). Paper grain, a wet edge along colour boundaries and edge wobble are applied to the fill in plan view, before it is draped over the relief. Land cover and waters get glazes laid by Kubelka-Munk rather than alpha blending, so a thin layer passes light down to the substrate and back: forest over ochre and forest over green give different hues. Pigments are defined by how a unit layer looks on white paper and over black, from which K and S are derived -- no spectral measurements needed. Area waters are watercoloured as their own layer, denser at the shore and lighter towards the middle of large bodies, with the shoreline stroke and the hydrography patterns unchanged. Land cover symbols are untouched: the wash sits under the relief the way a glaze sits under a pen drawing. Follows Bousseau et al. (NPAR 2006) for the stylisation and Curtis et al. (SIGGRAPH 1997) for the pigment model.
 7.5.0 Cast shadow from the terrain: ground hidden from the sun by a neighbouring ridge is now darkened, which diffuse illumination alone could not express -- a north slope is always dark, but the shadow of a ridge falls on lit ground too. Azimuth and altitude come from the existing light parameters; strength is a new parameter, on by default at half strength. Shadow length matches the analytic H/tan(alt) to within 5%%. Also new: a scene diagnostic printed to the log -- resolution and extent, elevation range and percentiles, median and P90 slope, the share of the area below the stroke threshold, and the contour bench spacing, followed by hints when a value falls outside a sensible range (bench spacing too tight or too wide for the chosen contour interval, a mostly gentle scene, too small an elevation range).
 7.4.0 Stroke engine: three long-standing artefacts of the hachuring addressed, each with its own strength parameter. Strokes no longer fuse into dark blots along valley floors -- a stroke stops where flow lines converge closer than the stroke spacing, measured as the divergence of the unit fall vector, which is a direct measure of two neighbouring strokes about to merge; in the same zone the shade-driven densification, extra width and higher opacity are damped, since a thalweg is shaded and concave at once. Stroke length now responds to slope across the whole range: the coefficient scales the descent at which a stroke breaks, so on gentle ground a stroke is a short mark instead of a long scratch. Stray strokes are thinned by how many distinct contour levels the hachuring around them describes -- a stroke on a single contour depicts no form, while sparse but honest hachuring on a gentle swell crosses several levels; the measure is independent of DEM resolution, so one setting works for 30 m, 90 m and coarser open elevation data. Available in all three rendering paths, strip tiling included, where the thinning runs once over all strips so seams are not cut.
 7.3.1 New thematic line layer: drawn above the hachuring in the colour, width and dash pattern taken from the QGIS layer style, per feature and under any renderer, and clipped where the terrain hides it -- the same treatment roads already get. The style is always used for this layer. Also a new checkbox, "styling from layer styles", off by default: with it on, the colour of area waters (seas, lakes, marshes) and of land cover (forest, sand, ice, scrub, grassland) is taken from those layers' own styles instead of the paper/fill theme; complex renderers are reduced to their first symbol. Our own graphics -- the coastal vignette, lake hatching, marsh tufts, land cover textures -- are kept in every case; only the colour changes. Where a layer is missing or has no colour, the theme colour stays.
 7.3.0 Relative mode reworked for gentle scenes (low hills, plateaus, low but steep coastal cliffs). Instead of stretching the finished drawing, the relief is amplified before hachuring, so slopes, contour density and stroke weight respond to it and the scene is drawn like a mountain rather than a stretched plain. The amplification is selective: small steep forms such as scarps and coastal cliffs are raised, while plains, broad gentle hills and DEM noise stay low. Contour spacing now follows the local relief. The separate "relative slopes" flag is removed -- slope handling is folded into relative mode. Works in every path, including strip tiling of large sheets. The Diazotype paper/ink preset colours were corrected to match a real diazo-print scan (warm ochre paper, dark plum line).
 7.2.9 Area waters (lakes, seas, marshes, settlement polygons) are now clipped where the oblique view puts them behind a ridge. A partially occluded polygon used to be drawn whole, so a bay behind the middle of a ridge spilled out in front of the mountain; it now gets a real gap, and a water edge peeking from behind a crest shows only its visible part. Coastal vignettes, lake hatching and marsh tufts follow the visible part too.
 7.2.8 Decoration is no longer drawn on top of the mountains it should be hidden behind. Two gaps: strip mode did no hidden-line clipping at all (the full visibility mask does not exist there, and rescaling coordinates into the downsampled grid was unsupported) -- the mask is now built from the downsampled displacement and applied to rivers, roads, settlements and land cover; area waters (lakes, seas, marshes, settlement polygons) and the hydrography patterns were never clipped in any mode -- pattern lines are now cut per segment, and a polygon wholly behind a ridge is skipped. Partially occluded polygons are kept whole: a vector fill cannot be clipped by a raster mask.
 7.2.7 Fixed a crash that took down QGIS while drawing sheet decoration: pyproj, called from a Processing worker thread, touched the PROJ database in a foreign context and killed the whole process (an access violation that cannot be caught). Inside QGIS its own coordinate transformer is now used; the result matches the previous one to nine decimal places. The crash only appeared with the map border, graticule ticks or the scale bar -- and only intermittently. Vector export is much faster: visible runs of a stroke are merged into one polyline instead of a scatter of two-point segments (2.6M on one scene). Agg is insensitive to this, but PDF pays per path -- hence the previous 925 s against 385 s for PNG on identical geometry. The drawing is unchanged, joins at bends are cleaner, and the pen-pressure simulation is preserved. A message with the path count is now shown before the file is written, so a long PDF write no longer looks like a freeze.
 7.2.6 Qt6/PyQt6 compatibility (QGIS built on Qt6): all Processing enums moved to their scoped forms (QgsProcessingParameterNumber.Type.Double, Qgis.ProcessingSourceType.VectorPolygon, etc.) via a single set of aliases; the minimum QGIS version is raised to 3.40 and supportsQt6 is declared. Settlement labels: new font parameter (generic families -- serif, sans-serif, monospace, cursive, fantasy) and size parameter (a multiplier, 1.0 = auto by sheet). The label size used to be a fixed point value that did not grow with the scene, so on large DEMs place names became tiny next to the coordinate labels. The marker scales with the label, and so do its offset and halo. Also: the marker edge was always white and stood out on sepia and blueprint presets -- it now takes the theme colour, like the label halo.
 7.2.5 Technical re-release for re-submission to the QGIS Plugin Repository: added proper exception logging instead of silently ignoring errors, resolving static-analysis warnings from the QGIS plugin security scanner. No functional changes.
 7.2.4 The compass rose and the scale bar are half the previous size. Coordinate labels no longer sit on the trim: the sheet was saved with zero padding, so the leftmost labels touched the edge; a small uniform margin has been added. The border of a nodata area now counts as an artificial edge just like the sheet frame, so no coastal vignette is drawn along it (most visible in the nodata 'Sea' mode).
 7.2.3 Fixed the 7.2.2 speed regression: the coastal vignette took hours. The shore buffer was recomputed inside the loop over rings (1032 calls at ~15 s each on a sea polygon with 346 islands); the selection now subtracts a buffer of the frame, computed once per call. The vignette with islands is three times faster than it used to be without them. Islands smaller than two vignette steps take no part in the band -- this affects neither the fill nor the islands themselves.
 7.2.2 Islands no longer sink: extracting polygon layers (seas, lakes, marshes, ice, land cover, settlement polygons) now preserves interior rings. They used to be dropped, so a sea polygon flooded the skerries and looked displaced against the relief. Patterns respect holes too: lake hatching and marsh tufts stay off the islands, and the coastal vignette follows their shores. New parameter "Areas without data (nodata) shown as": plain (as before), sea, or clean paper -- nodata used to be filled silently with the nearest elevations and rendered as a phantom plain.
 7.2.1 The top sheet frame no longer sits on top of the mountains: horizontal frame lines, map-border checkers and graticule ticks with their labels are now broken along the relief silhouette wherever oblique displacement pushes terrain past the top edge of the sheet. Side and bottom edges are unchanged.
 7.2.0 Relative scene scale: an optional mode where the oblique displacement is normalized to the scene (p99 stretched to a target percentage of the sheet height) and the contour interval comes from a number of elevation belts instead of absolute meters -- gentle scenes such as low hills or steep but low coastal cliffs now render with full line work. A separate optional flag normalizes slopes by scene percentiles instead of fixed 4/45 degrees. Both are off by default; Hammond classification is unaffected. In strip mode the coefficients are computed once on the downsampled pass and shared by all strips, so seams stay consistent.
 7.1.0 Sheet decoration: frames (single, double, thick-thin, checkered map border with degree fractions), graticule ticks with D°MM' labels (any CRS via WGS84), old-style scale bar, compass rose / north arrow honoring true north on any projection and rotated canvas. Old-print emulation: dot screen, paper grain, R/B misregistration (PNG). Large-form shading: two-tone lithographic shadow spot or XIX-century anaglyptography engraving (mutually exclusive). UI reorganization: paper/fill/thematic reduced to three fields, all vector layers grouped together. English release.
 7.0.0 Vector export (SVG/PDF): choose the output format for a clean print sheet or editing in vector software (raster fill embedded). Strip tiling of the classic mode for huge sheets without memory overflow. All of v5-v6: canvas rotation (0/90/180/270°), paper/ink presets (sepia, blueprint, cyanotype, old map, white, diazotype), optional stroke width jitter, auto-sea from the DEM with island holes preserved, hydrography patterns and land cover textures, Hammond A-D landform modes.
 4.0.0 Full rework: two algorithms (landform + classic hachures) on a shared core. Hypsometric fill from elevation (Patterson, Bartholomew, Peucker, Imhof) with manual min/max override and optional percentile stretch. Thematic fill takes colors from the QGIS layer style (no rendering). Fill draped over the displaced relief. Automatic background theme: monochrome water on sepia, blue on fills. Separate water layers (rivers, lakes, seas, marshes), roads, settlements. Layers clipped to the DEM extent. Memory control in classic mode. PNG output.
 3.1.0 Hybrid hachures (classic + Mower), landform classification, fills, decoration layers.
