pcb-rnd 3.1.8 (r40207)
~~~~~~~~~~~~~~~~~~~~~~
	[act_read]
		-Add: RtreeList() action - low level read-only access to rtrees

	[build]
		-Fix: reconfigure flex not to use isatty(fileno()); affects io_hyp, io_pcb and query

	[cam]
		-Add: fixed* cam jobs shall export slots in excellon as separate files

	[core]
		-Fix: poly-clear-poly: when computing clearance shape of an inner poly, consider only the first island when the fullpoly flag is not set (fixes ml=6978)
		-Fix: disable the snap-trap avoidance mechanism when "pin snapping" is turned off - some users turn of snapping to get precise, point-by-point stepping while moving parts (and always applying the workaround causes big jumps around padstacks) and with snapping turned off the cursor doesn't get trapped anyway
		-Add: new conf setting for controlling subc-origin-snap
		-Add: API call for (un)selecting an object by pointer, with all user-click side effects applied
		-Add: expose pcb_net_term_crawl(), useful for net mapping
		-Add: DisperseElements(Buffer) to help grouping randomly arranged subcircuits in the buffer into a tightly packed rectangle

	[doc]
		-Fix: missing <p> after <h*>
		-Update: why-use-ringdove: UNIX mindset is top prio now; remove excellent user support (not true for passive users anymore)
		-Update: wishlist: rbs_routing for push&shove and charts are considered done now
		-Change: deprioritize old videos within the tutorial series: written material may cover some areas our videos don't and the old tutorials use gschem/lepton that we shouldn't promote anyway
		-Add: map the problems and possible solution to the top-window limitation of gtk for the "footprint selector" application of pcb-rnd
		-Add: document data addressing (used by some actions)
		-Add: win32 install doc: cross link the Ringdove FAQ on how to disable the firewall
		-Add: contact: link bugreporting howto
		-Add: new, ringdove-unified logos
		-Add: action doc for ListRats()
		-Add: document DisperseElements(buffer) action
		-Add: rosetta scripting example (in fawk only, for now) about dad() text widget
		-Del: local bugreport howto -> linked to Ringdove's generic one

	[export_dxf]
		-Del: local lihata template implementation, use the one from librnd 4.5.0
		-Update: API change in librnd r38235

	[export_openscad]
		-Fix: use-after-free bug with full_path when there's a non-ID character after module

	[export_svg]
		-Add: explain the values of --opacity in help

	[export_xy]
		-Fix: typo in usage help text (module name is uppercase)

	[export_web2]
		-Add: plugin for exporting self contained, single file, multipage, searchable html+svg+js

	[footprint]
		-Fix: common_subc: typo in square pin mask span made the argument ignored
		-Add: version attrib in static footprints
		-Add: "generator" attribute in all stock parametric footprints, for proper versioning
		-Add: new "made with" logo, based on current Ringdove EDA logo

	[io_bxl]
		-Move: bxl_decode (low level container file format handler) moved to rnd_inclib so that sch-rnd can use it too
		-Add: accept (and ignore) font family and font face in text style (same as sch-rnd r11673)

	[io_lihata]
		-Fix: post-assign unique IDs after loading a footprint for direct edit (many of the undo operations depend on existing implicit IDs e.g. for poly points)

	[lib_compat_help]
		-Fix: don't crash when creating a hole-only padstack with square/polygon shape of diameter==0; replace any polygon shape with diameter<=1 with a circle of diameter=0; the bug was triggered by Lapo loading an old geda/pcb footprint that had a hole with the square flag set

	[libcdtr]
		-Cleanup: unify header watchdog defines, make sure they are not too vague (they shall all start with LIBCDTR_) so that namespace clash when plugged into a large project is minimized
		-Add: user data field in triangles
		-Add: comment explaining user data in edge and point structs

	[menu]
		-Add: ListRats() menu and hotkey binding (to {c l})
		-Add: DisperseElements(buffer) menu entry (in buffer menu) and hotkey {b d s}

	[query]
		-Fix: memory leak on view list ptr domain registration

	[rbs_routing]
		-Fix: typo in icon xpm (excess pixel)
		-Add: when the user failed to click a starting point precisely go and try some wider searches for a nearby point

	[report]
		-Add: ListRats() action to ease finding the last reamining few rats on a big crowded board

	[scconfig]
		-Fix: make sure our own -I's are before user supplied -I's in the CFLAGS; Nathan demonstrated a case where prepending user supplied -I made CC find libevent's event.h sooner than our ../src/event.h while compiling plugins

	[show_netnames]
		-Fix: shorten the short-name of the package, it was too long and messed up the table formatting of scconfig summary output

	[suite]
		-Add: plugin for suite-level features
		-Add: XProbeSend() and XProbeRecv() actions for cross-probing (e.g. cross-selection) with sch-rnd via prj-rnd

	[tests]
		-Fix: don't use random(), use rand() in strflags test, because of C89 portability

	[tool_std]
		-Fix: don't use named X colors in xpm, mbtk won't be able to interpret that, hardwire #rrggbb
		-Fix: angle-reserving poly point move: increase undo serial for the batched operation

	[util]
		-Add: not-installed devhelper script "subc-aux-verify" to verify footprint subc-aux objects
		-Add: fp3d: footprint 3d model test bench tool


pcb-rnd 3.1.7 (r40036)
~~~~~~~~~~~~~~~~~~~~~~
	[act_draw]
		-Add: action doc references

	[ar_cpcb]
		-Del: remove the plugin - cpcb is an unufunshed and unmaintained project that lacks documentation and partial routing; use route-rnd instead

	[common_subc]
		-Fix: square pad minimum size should be 2 nanometer, not 2 mm

	[core]
		-Fix: low level board resize doesn't redraw (invalidate_all) during export; fixes the assertion bug of -x exporting a footprint
		-Fix: typo in padstack relative size change op: negative delta was setting size to 0 instead decreasing it
		-Fix: pcb_ui_move_obj_to_layer(): when creating a new bound layer, e.g. for {s l}, save purpose as well so that layer side mirror won't break
		-Fix: pcb_acts_ChangePinName(): don't initiate redraw under draw_inhibit to avoid flicker during sch (re)import
		-Fix: find.c: poly-poly intersection test should repsect the fullpoly flag - fixes false positive on a removed (invisible) secondary island being fully within another polygon
		-Fix: find.c: poly shaped pstk vs. polygon isc test: respect fullpoly flag and don't intersect with invisible/removed islands of the polygon
		-Fix: thermal: zero-length-line corner case optimization truncated too many from the thermal bits causing sharp and diagonal bits lost in render
		-Fix: pstk id resolver shouldn't crash when parent data is not available, just return invalid
		-Cleanup: remove dead code that should have used poly_isle_area; it was added back in 2007 but was #ifdef'd out in any pcb release after so this is a feature that never worked anyway
		-Add: pcb_layer_smirror_bound() to centralize bound layer side mirror; at the moment it is mirroring type bits and offset, but for keepout layers it would also need to mirror the purpose string
		-Add: pcb_layer_smirror_bound(): swap ko@ side in purpose string if it's top or bottom
		-Add: MorphPolygon(): throw a warning on islands removed
		-Add: make layer group to copper level cache 2-way so that the level of a group can be looked up efficiently

	[diag]
		-Fix: DumpLibFootprint(): use full footprint name, with parameters, to load footprint from lib to buffer

	[dialogs]
		-Fix: preferences dialog sizes tab: show the initial value of isle area (use the right macro to set it so DAD knows)
		-Fix: missing \n at the end of error message (parametric footprint argument miss)
		-Fix: parametric footprint editor: when an optional(-looking) parameter is set from the example, mark it changed so that it always ends up on the command line - fixed bedrock-rnd plcc-rfp()'s PRPL
		-Add: explain isle_area setting in preferences sizes tab better
		-Add: library_param: file format: #@@default_unit changes default parse unit from "mil" to whatever the parametric needs

	[dialos]
		-Fix: Save() autodetect from file name accepts .rf for footprint

	[doc]
		-Fix: developer's doc on plugin config: missing rnd_prefix in example
		-Fix: wrong header title in privacy policy page
		-Fix: grammar and typos in win32 installation doc
		-Del: redundant board/footprint/netlist format rows in datasheet - rely on autogenerated
		-Del: help list: tutorial text removed; tutorial videos are better
		-Update: redirect windows binary download to the Ringdove zips
		-Cleanup: comment out dead/slow mirrors
		-Add: list new download options (binpack, win32)
		-Add: "why use" section on main page
		-Add: lihata format doc explains where isle_area_nm2 is used and how it is broken
		-Add: config node design/poly_isle_area: explain where it is used, what's the unit and mention the /2 or *2 bug
		-Add: developer's doc: plugin config: a few extra lines for embedded (internal) config, which is standard by now
		-Add: describe common arguments of act_draw actions
		-Add: action doc for linenew() and arcnew() and textnew()

	[drc_query]
		-Add: stock rule for ko@ layers
		-Add: more meaningful explanation text for ko@ overlap

	[export_dxf]
		-Fix: IDs are hex, not decimal
		-Fix: increase max ID ($HANDSEED) to "large enough"; the value really should be the last id we use + 1, but it's in the header so number of objects is not yet know when it is generated
		-Fix: wrong initialization of gc->drawing_hole (reported by John Wehle)

	[footprint]
		-Add: common_subc: API version variable
		-Add: common_subc: print layer purpose when present
		-Add: common_subc: round rect pad shape generator
		-Fix: common_subc: round rect returns sharp rect if r<=0 to save on polygon points
		-Add: common_subc: refine corner rounding (of square) for small radii

	[import_sch2]
		-Add: inhibit poly clipping and redraws while doing the (re)import - it makes no sense to redraw/reclip after each footprint replaced

	[io_eagle]
		-Fix: mirror the board even if there were errors reading it; it's better to have broken data with the right orientation than broken data with the wrong orientation
		-Fix: allow layer ID 255 (Vuokko had a board with such high ID but the GUI doesn't seem to allow more)
		-Split: arc angle calculation from (x1;y1 x2;y2 curvang) from wire arc draw to a separate, reusable function: curved contour poly will depend on this too
		-Add: support for curved polygon contour (using line approximation)

	[io_kicad]
		-Add: add footprint load capability in metadata

	[lib_netmap]
		-Fix: don't start mapping from objects already found
		-Add: map_j2nets: junction based 2net mapping

	[libcdtr]
		-Add: generate explicit rules and deps locally

	[menu]
		-Del: hardwired layer keys (number-keys): they depend on the ID of layers which are not visible via the GUI; use layer attributes to set up custom keys instead
		-Add: KEY BINDING CHANGE: replace Select/List locked objects (which was {s k}) with a submenu that hists List locked objects (which is {s k l} now) and a bunch of other menus for selecting/unselecting locked/unlocked objects and (un)locking all selected objects
		-Change: swap primary and secondary key bindings of the about box, so primary is {i a} and secondary is {w a}, to match new suite level defaults

	[query]
		-Fix: netmap: padstack vs. any other object hop bug introduced r38739: it made any via look like a junction
		-Fix: netlength: don't let an object offend itself in figuring junctions
		-Add: frame for keepout layer matcher function

	[rbs_routing]
		-Add: sequential and line/arc stretch routing tools

	[sketch_route]
		-Del: remove this unfinished plugin (with the permission of Wojciech) - rbs_routing can already do all this in its sequential mode

	[util]
		-Fix: scale svg in pcblib-param preview so that it fits the browser window
		-Fix: pclib-static: don't list scad files in static footprint listing
		-Fix: wrong content-type for svg in static footprint preview
		-Fix: static footprint preview should fit svg in browser window width
		-Fix: pcblib param cgi: tolerate dash in parametric footprint file name
		-Fix: typos in pcblib-param that can cause help not working, depending on awk implementation
		-Fix: pcblib-param: make sure path separator is present when processing #@@include
		-Change: pcblib cgi shouldn't print footprint text next to the drawing, it's just too large in lihata; rather move the download link above the render
		-Update: cgi preview generator: option for 'structural' output,with mask and paste
		-Add: rect-union-rnd for computing union of rectangles
		-Add: extra safety net for invalid footprint names in static cgi

pcb-rnd 3.1.6 (r39711)
~~~~~~~~~~~~~~~~~~~~~~
	[build]
		-Fix: typo in paths for the win32 port
		-Fix: when static librnd is requested, LDFLAGS shall include $(LDFLAGS_LIBRND_STATIC)
		-Fix: /local/pcb/want_static_librnd is not a mandatory scconfig var
		-Change: base static/dynamic path decision on floating-fhs setting, not on system type

	[cam]
		-Fix: the PCBWay job did not export slots
		-Add: cam job in default config for asm service of JLCPCB (xy and bom)

	[core]
		-Fix: text centering bug when printing vertical terminal label while the board is viewed from the bottom side
		-Fix: arc: arbitrary angle rotation: recompute bbox after arc modification before it is added back in the rtree
		-Fix: don't free polygon fields before unregstering polygons from rtree in layer_free_fields, this may result double rtree entries for some polygons
		-Fix: find.c: off-by-one bug in edge loop of poly-poly check: last edge of c1 not checked in pcb_isc_poly_poly_bloated()
		-Fix: const correctness: pcb_layer_is_pure_empty() can take const pcb_layer_t * as it's not going to modify it
		-Fix: don't accept '-' in term name, it's the refdes-term separator
		-Fix: don't crash on 'polygon cleared out of existence' on low level poly queries
		-Fix: conf dir is runtime built in floating fhs mode
		-Fix: potential NULL pointer deref in pcb_poly_is_valid() for invalid holes
		-Fix: find.c: arc-arc endpoint with negative bloat produced false positive "insufficied overlap" drc checks
		-Fix: xform_setup() adds export transformations and GUI transformations on top of an existing caller transformation
		-Fix: gfx object: when scaled, also scale up center x;y coords - on other vector objects coords are simply multipled on scale and this also shifts objects, gfx should follow
		-Fix: data scale should scale gfx objects as well
		-Fix: gfx object mirror call should flip y-mirror and adjust x and y coords
		-Fix: data mirror should also mirror gfx objects
		-Fix: gfx rotate90: also rotate cx;cy
		-Fix: buffer rotate90 should also rotate gfx objects
		-Fix: gfx: arbitrary rotate should rotate cx;cy as well
		-Fix: arbitrary rotate buffer should rotate gfx objects as well
		-Fix: search.c: return gfx point (corner) before gfx so it's possible to grab corners for resize
		-Fix: gfx corner grab resize shouldn't ever mirror gfx (happened due to uninitialized fields)
		-Fix: board name change shouldn't perform a full board switch but only trigger a design metadata changed event; it's not only cheaper but also avoids a crash in propedit during editing the name of the board
		-Fix: udpate bbox of all affected padstacks and sorrunding poly clip after pstk proto grow
		-Fix: various typos that made action PadstackMoveOrigin() unusable
		-Fix: ensure padstack bbox and poly clipping after proto or proto shape move (e.g. from PadstackMoveOrigin)
		-Fix: ensure padstack bbox and poly clipping after proto shape scale (not directly invoked, tho)
		-Fix: ensure padstack bbox and poly clipping after proto shape derive
		-Fix: ensure padstack bbox and poly clipping after proto shape swap with another shape
		-Fix: ensure padstack bbox and poly clipping after proto shape replacement to hshadow
		-Fix: ensure padstack bbox and poly clipping after proto shape removal
		-Add: --show-paths also prints internal (non-config) paths for debugging
		-Add: config node for hierarchy separator; don't accept the hierarchy separator character in term name
		-Add: function for checking if a refdes text is valid
		-Add: object id verification: accept hier-sep (normally '/') in refdes but not in terminal name; this makes the syntax a/b/c-4 with no / or - after the first and only -
		-Add: draw: main expose remembers last viewbox shown
		-Add: generalize line-point distance^2 call: provide a version that doesn't require a line object
		-Add: make pcb_geo_point_line_dist2() optionally return projected point's details (offset and coords)
		-Add: padstack prototype: framework for classifying crescent shapes
		-Add: padstack crescent: proper support for padstacks where the slot or hole cuts into the ring making it "C" shaped

	[diag]
		-Add: integrity: detect invalid padstack prototype value
		-Add: integrity: error for padstack proto with no shapes or hole
		-Add: integrity: check for invalid padstack prototypes
		-Add: integrity: pstk check mentions if the problem is in the buffer

	[dialogs]
		-Fix: parametric lib entry: work around wine/windows bug: read all input before calling pclose()
		-Fix: missing include for rnd_w32_bindir
		-Fix: save dialog crash on deleting characters in empty input (parent poke return value check missing)
		-Add: ViewPortDialog() with action and menu

	[doc]
		-Fix: clarify volunteer feature vs. project goals
		-Fix: faq duplicate html ids
		-Fix: terminology on scripting: user script for embedded scripting
		-Update: motivation doc for sch-rnd stable back in 2023
		-Update: remove fedora, parrot, and raspbian from the official package list because they don't deliver 3.x.x
		-Add: document extras and limitations in io_pcb
		-Add: Devuan on the official packaging list
		-Add: export_xy: explain board origin object
		-Add: mention project goals in contrib howto
		-Add: win32 doc section on native windows compilation, msys and cygwin

	[drc_query]
		-Fix: drc rule edit: if rules list on target role list is empty, copy all rules first
		-Fix: edit dialog: less confusing log messages when all rules are copied
		-Fix: wrong error type passed to lihata path lookup

	[export_bom]
		-Add: template for JLC assembly
		-Add: part-rnd option (bool) that exports in part-rnd tEDAx

	[export_dxf]
		-Add: --line-width-enum option for sticking to specific line widths listed instead of threating it as a size

	[export_hpgl]
		-Split: thin draw hpgl export code from export_hpgl.c; export_hpgl.c should hold common code only to make room for the toolpath variant
		-Add: hpgltp (toolpath) exporter
		-Add: hpgltp: --repeat option

	[export_openems]
		-Change: rename pcb_mesh_* to openems_mesh_* - this is not a generic mesh but an openems-specific one that implements details relevant to openems only
		-Fix: frequency widget handling in excitation: both fc and f0 should be freq and should be converted as double
		-Fix: error message on broken outline loop instead of crash
		-Fix: don't use .+ and .- matlab operators on vector-scalar when transforming mesh as it fails with recent versions of octave; see ml6514, ml6560

	[export_svg]
		-Add: color space export option (color/grayscale/b&w)

	[export_xy]
		-Fix: pad based center coords for non-90-deg rotation - the original code did not rotate the result back and did not transform it
		-Add: %subc.CHAR-side% to print T or B for jlc
		-Add: template for JLC pick-and-place service
		-Add: --normalize-angles option so that output angles are between 0 and 360

	[extobj]
		-Fix: subc operation(): inhibit recalculating extobj while doing the operation and recalc the whole thing only once, at the end
		-Add: pcb_extobj_recalc() to force full recalc of an object, useful after an operation()

	[import_sch2]
		-Fix: use rnd_is_path_abs() instead of local non-portable solution
		-Fix: accept both / and \ as path separator on win32

	[io_easyeda]
		-Add: plugin for loading EasyEDA std and pro boards and footprints

	[io_pcb]
		-Fix: do not save io_pcb::hidename* subc attributes - these are encoded in the Element header in this format
		-Fix: emulate Pad[] solid connection (no clearline) with clearance=0 and throw io incompatibility error on SMD thermal
		-Optimize: make Element attribute inhibit list on save static so it can be stored as read-only
		-Add: read file format 20180318: new VIA line
		-Add: read file format 20180318: route style parser: load the optional extra dimension for mask, seen in file format version 20180318
		-Add: read file format 20180318: create blind/burried vias
		-Add: set preliminary number-of-copper-layers var compat_pstk_cop_grps when reading the layer group string, for the compat bbvia function
		-Add: support PX as unit (same as NM) because geda/pcb added that in its format probably after 2017
		-Add: support for old-unit 1.7c pads, added in geda/pcb probably after 2017
		-Add: loader: throw error on bbvia layer index larger than number of copper layers
		-Change: reorder the pad*c rules in the .y to match the order of rules in geda/pcb's .y for easier comparison in the future; also rename the pad 4.3 rule to pcb's c suffixed variant

	[lib_bom]
		-Fix: don't run the bom print loop if printer callback cb() is NULL
		-Fix: don't write footer if ctx->f is NULL on _end() - relevant for part-rnd
		-Change: make template struct field const qualifier optional (part-rnd needs to dynamically allocate them)
		-Add: support for alternate output in part-rnd tEDAx format, inlcuding the template, all global and per part attributes
		-Add: make multi-template rnd-config part optional
		-Add: make 'static' configurable so the code can be linked with public API (for part-rnd)
		-Add: generic version of the print all function that operats a callbakc instead of printing the template
		-Add: publish bom_item_t, required for part-rnd
		-Add: don't print anything if FILE *f is NULL (useful in part-rnd for dry sort)
		-Add: expose bom_render_templ() in the public API for part-rnd

	[lib_compat_help]
		-Add: implement compat bbvia call
		-Add: publish pcb_old_via_new_bbvia()
		-Add: more specific error message on mask opening while saving gEDA/pcb route style - explain that we load newer file format version than we save
		-Add: PCB clearline flag workaround on pins (confusion with pin name show)

	[lib_easyeda]
		-Change: when loading json with string keys convert hashes to arrays because we are not going to have an integer value to hash with
		-Add: json-from-string parser
		-Add: gendom option to save node names as string if there's no function to translate them to integer
		-Add: str2name() callback of gendom passes on uctx and current node to help decision on whether an unresolvable name is actually an error or not
		-Add: gendom concept of GDOM_CUSTOM_NAME for user assigned names stoerd in ->name_str (optional)
		-Import: zip command helpers from sch-rnd

	[lib_geo]
		-Add: license in arc_sed
		-Fix: arc_sed doesn't depend on non-c89 M_PI

	[lib_hid_pcbui]
		-Fix: also update the title on design meta change if design name changed

	[lib_polyhelp]
		-Add: topoly_solid: build per layer polyarea of objects marked with a dynamic flag

	[menu]
		-Fix: buffer normalize shouldn't rotate the buffer

	[mincut]
		-Fix: typo permanently disabled showing mincut results

	[polybool2]
		-Fix: avoid null ptr deref for polygon cleared out of existence
		-Fix: cheap-draw optimization should use pixel sized line to avoid blobs forming
		-Fix: don't run the line-poly otpimization outside of the gui
		-Fix: line-poly optimization: wrong comparison on size vs. bool
		-Add: enable automatic self-isc resolve when polybool2 is enabled, but never change the FULLPOLY flag (just warn about it) because that'd break load compatibility
		-Add: when fixing up a self-intersecting polygon, the error message shall include poly ID and a coord and ask the user to fix it
		-Add: extra optimization for pixel-size polygons - draw them as a single line without oterating over the contour; single pixel polygons shouldn't drawn at all

	[propedit]
		-Fix: don't crash if empty string (NULL) is set for board properties

	[report]
		-Fix: when available, use rtree debug define to avoid multiple definitions of rtree debug functions link-time
		-Add: report on subc incldues rotation angle (deduced from subc-aux vectors)

	[rtt]
		-Add: prepare Export.sh for flavored test refs for polybool2
		-Add: flavored polybool2 refs

	[shape]
		-Add: round rect gen API for working in an existing polygon

	[show_netnames]
		-Fix: compensate for board flips so the text is never rendered in mirror image in any combination of board flip_x and flip_y
		-Add: auto-rotate text to make it readable from bottom and right (no text upside-down)

	[tests]
		-Add: central make test runs new pstk_crescent tests
		-Add: cam_partial: autotest for query based partial export (from the pool node filledvia)
		-Add: (inactive) find tests: name padstack prototypes for easier debugging


pcb-rnd 3.1.5 (r39029)
~~~~~~~~~~~~~~~~~~~~~~
	[build]
		-Bump: required librnd version is >=4.2.0 for testing polybool
		-Add: scconfig summary contains a line for which polygon lib is chosen

	[cam]
		-Add: default pnp doc export jobs to ps and gerber

	[core]
		-Fix: round termal generation: in extreme cases (large clearance) the round thermal's 4 cutout arcs may instersect; originally the code simply linked them together which causes invalid poly; the new code links the opposite side arcs together in two pairs then calls the poly lib to combine them so that any potential intersection is handled correctly
		-Fix: subc: avoid creating subcircuits with invalid bbox (e.g. when a subcircuit cosists only of aux and floater objects), rather have a small, artifical bbox
		-Fix: read of uninitialized memory in draw code around plugin_draw
		-Fix: padsatck bbox calculation: do not ignore center coords of circle shape (bbox was broken for circles not centered at padstack origin)
		-Fix: more accurate DRC check on poly-poly: in the per edge test loop, instead of square cap pcb lines, use thin circles and thin offset lines
		-Fix: padstack poly offseting bug on coaxial corners: port the cocept from polybool2, librnd r37294
		-Cleanup: wireframe inline draw helpers: separate API from implementation
		-Cleanup: avoid librnd font2 GVT redeclarations
		-Add: ElementList(): when new footprint is not found in the lib, print an extra error message with the refdes included so it's easier to find which symbol is wrong on the sch side
		-Add: implement polygon point reduction in render preparation for polybool clipping (speeds up rendering of crowded areas like arc approximations, when zoomed out a lot - sort of a level-of-detail system)
		-Add: plugin-drawn layers: optional layer draw function callback (intended for UI layers mostly), similar to osm-rnd's
		-Add: plugin draw data ptr in layers so that custom draw functions can remember their data
		-Add: low level wireframe inline draw: option for drawing arc and line without any end-cap
		-Add: standard undoable modify() API for the arc object (geo modifications)
		-Add: RefdesText() action for refdes manipulation shorthands
		-Add: new event: PCB_EVENT_LAYER_PLUGIN_DRAW_CHANGE (for portable plugin-drawn doc layers)
		-Add: plugin_draw mechanism for overriding the layer_is_empty() decision from a plugin so layer full of side effects is not considered empty

	[diag]
		-Fix: subc get side call needs an int *, not coord * for its output (even tho sizeof(int) <= sizeof(coord) some new versions of gcc may throw an error)

	[dialogs]
		-Cleanup: const correctness

	[doc]
		-Add: windows installation: how to create a desktop icon

	[draw_pnp]
		-Add: new plugin for auto-generated pick-and-place helper doc layer

	[export_hpgl]
		-Add: export centerline drawing in the HP-GL (plotter) format

	[exto_std]
		-Fix: int * != coord * (modern compielrs may panic)

	[fontmode]
		-Cleanup: const correctness

	[io_altium]
		-Fix: inhibit poly clipping during thermal postprocess - saves a lot of CPU cycles by batching clipping ops

	[io_kicad_legacy]
		-Fix: int * != coord *; some modern compilers threw error

	[io_lihata]
		-Fix: int * != coord *; some modern compilers threw error

	[lib_hid_pcbui]
		-Fix: route style dialog: don't crash on attribute edit if no key or val is specified
		-Fix: missing DAD widget tree closing in the route style dialog causing invalid memory reads

	[lib_netmap]
		-Fix: reset osegs on uninit so reusing a context won't trigger invalid memory access
		-Add: remember one junction (globally) so that the caller can decide if the map is junction-free

	[map_2nets]
		-Fix: 2net mapping init() shall return 0 on success

	[menu]
		-Add: RefdesText() calls in the menu

	[order]
		-Cleanup: const correctness

	[poly]
		-Fix: clearance accumulation: don't rely on the polygon lib to accept NULL on bool ops (initial step of creating the accumulator; should be a plain assignment)

	[polybool2]
		-Fix: much cheaper and memleak-free insertion of the first polyarea in clearance construct
		-Add: option to link against polybool2
		-Add: instead of the slow boolean ops, construct padstack clearance cutout using the new poly offset code
		-Add: scconfig doesn't let both polybool and polybool2 enabled - need to pick one because they offer the same API
		-Add: scconfig: also print whether the old/original poly lib is used so there is always exactly 1 'true' in the summary for the poly libs
		-Optimize: poly clearance calculation: don't subtract in 2 steps, that's slower with polybool2 than doing it in a single step
		-Optimize: all-poly clipper turns off polybool2 pline edge rtree generation and generates all missing rtrees only once, at the end so intermediate rtrees are not computed and discarded

	[propedit]
		-Fix: pcb_propsel_sel(): inhibit poly clipping and draw while executing batched change of properties - speeds up the operation when dealing with a large number of objects

	[query]
		-Fix: net seg map: don't mistake two random padstacks as adjacent only because the second endpoint is set to RND_COORD_MAX in both

	[rtt]
		-Add: cope with different test ref flavors for handling the case when e.g. using the polybool lib produces valid, but sligtly differently ordered output for some of the files

	[serpentine]
		-Fix: don't pass string as rnd_color_t, they are not compatible
		-Fix: missing #include for drawing routes--This line, and those below, will be ignored--
		-Fix: tool callbacks all need to get the design to operate on

	[tests]
		-Import: John's poly-poly (concave) drc bug sample to autotest

	[vendordrill]
		-Fix: allocate for rnd_coord_t size for drill dia coords


pcb-rnd 3.1.4 (r38675)
~~~~~~~~~~~~~~~~~~~~~~
	[asm]
		-Add: fill in group progress when the dialog box is created so the user sees how many subcircuits are in each group

	[build]
		-Update: depend on librnd >= 4.1.0 (transition to the new font engine)

	[core]
		-Fix: ignore aux layer lines when updating subc bbox (not calling the central data update)
		-Fix: when ignoring aux layer for bbox recalc in layer obj dup, decide by source object/layer not by destination because destination layer binding may be incomplete
		-Fix: subc replace (shift+click): do not add all the floater moves onto the undo list: the whole subc is created/removed at once on redo/undo
		-Fix: be less intrusive with events and don't do a full librnd design replace on board size change - if it happens from the propedit that'd close the propedit during the GUI event which segfaults
		-Fix: gfx measure resize should use the absolute value of pixel distance, direction shouldn't matter
		-Fix: when calculating padstack bbox local clearance shall not be ignored when global clearance is 0
		-Fix: proto move needs to reverse transform dx;dy when making modifications to transformed shapes
		-Fix: drc padstack ring min thickness special casing for circle of diameter 0: should never break (used in compat pstk converter for the clearance side effect when loading e.g. geda/pcb pins)
		-Fix: find.c: line-poly and arc-poly intersection: clamp line and arc thickness after bloat subtracting bloat so they don't ever become negative; fixes the corner case when minimum copper overlap requirement is comparable to trace thickness
		-Fix: segfault on rats patch when shift-click replacing a subcircuit that had no refdes
		-Del: replace pcb_act_Export() with librnd 4.1's rnd_act_Export()
		-Add: ElementList(Need) has an optional extra argument to set the device attrib
		-Add: implement low level x and y mirror in pixmap cache render
		-Add: undoable change call for gfx mirror bits
		-Add: when importing a pixmap onto a bottom side layer, auto-set y-mirror on the gfx so it appears correctly in the most common case (photo taken of the bottom side)
		-Add: undoable prototype and shape move functions that translates the prototype by relative dx;dy coords
		-Add: PadstackMoveOrigin() performs the actual prototype transformation and moves all users of the padstack back to its original position
		-Add: negative rat thickness means size specified in pixels; also add explanation on rat_thickness conf node values
		-Add: document the doubled local clearance value bug

	[dialogs]
		-Fix: padstack proto dialog: compensate for the confusing doubled-value local clearance storage so the UI always shows consistent "clearance means gap" values
		-Add: preferences window tab "Board meta" prints a line with the loader plugin's name
		-Add: view dialog 'cycle' button to cycle through zooming onto different highlight objects

	[djopt]
		-Fix: via removal should pass on via pointer as ptr2 (ptr1 is "parent")

	[doc]
		-Add: document that padstack per shape local clearance is stored as half

	[drc_query]
		-Fix: need to strdup() all strings entered into the tree-table widget else a crash may occur on drc dialog close

	[export_bom]
		-Add: make list separator sequence configurable
		-Add: a second default template that includes the device attribute as an extra column (so that an opamp is not simply so(8) but also an lm358)

	[font2]
		-Del: PCB_WANT_FONT2: always require font2
		-Del: ./configure time option that enables font2
		-Update: tests/drc_query/invchar.ref was buggy with the old font engine because (invalid char bbox bug)
		-Fix: use the usual rendering opts (for &entity;) when checking for invalid chars in text objects

	[fontmode]
		-Fix: font v2 kerning shall be translated to &xx hex glyphs instead of decimals in font preview window
		-Fix: don't segfault when fontsave is ran outside of fontmode, but throw an error and some remarks
		-Fix: preview dialog should have only 2 widgets in VPANE
		-Fix: decoding &num from string in kerning table preview edit should use hex, not decimap
		-Add: kerning table edit: allow multiple keys in a space separated list
		-Add: sort kerning table in preview window
		-Add: the font preview window should be split by a vertical pane windget so that there's more room for the kerning table when needed
		-Add: preview dialog widget to remove a kerning table entry
		-Add: preview: save font button
		-Add: comments on which widget does what and ends where
		-Tune: rearrange help text widget in the kerning table dialog for better screen estate utilization

	[footprint]
		-Fix: common_subc: get pad's mask and paste offs and ratio play better with absolute value being 0
		-Add: common_subc: help text for generic offs and ratio parameters include hints on how to use them in practice

	[io_eagle]
		-Fix: create subc aux layer before any other layer when creating new subcircuits to avoid mixing layers

	[io_lihata]
		-Fix: font v2 kerning shall be saved with &xx hex glyphs insteadof decimals
		-Change: make board v9 the default format

	[io_pcb]
		-Fix: save attribute names and values quoted so that " and \ won't break
		-Fix: don't change drc settings in design conf when importing pcb into buffer
		-Fix: reset design conf role before low level parse so previous settings don't leak in; also fixes: don't overwrite drc settings loaded by the low level parser
		-Fix: undo partial config mods (anything in design role) when parsing a board fails

	[io_tedax]
		-Add: netlist load: save (component's) device and use it in ElementList() so the subcircuits placed get the right attribute

	[lib_compat_help]
		-Fix: when saving an smd pad in compatibility mode, double padstack global clearance but do not double the local clearance (it is already doubled)
		-Fix: compatibility pin flags: recognize "holes" (padstack has unplated drilled hole and zero dia circle copper shapes or no copper shapes)

	[propedit]
		-Add: expose gfx x and y mirror bits

	[tool_std]
		-Fix: disable footprint replace on paste when doing a selected drag-and-drop move: if footprint replace broke, it messed up the sequence and the undo seqno, while it doesn't make sense to replace footprints on selected move with shift

	[trimesh]
		-Fix: action description


pcb-rnd 3.1.3 (r38476)
~~~~~~~~~~~~~~~~~~~~~~
	[backann]
		-Fix: rats patch "already done" check: when accepting component add/del, consider the input netlist, not the edited netlist (the edited netlist will always have the modifiaction, independently of whether it's been annotated back to the schematics)
		-Add: CLI for attribute back annot: propset(), just make sure the right conf node is set

	[core]
		-Fix: typos in Net() help
		-Fix: when generating file name for saving rats patch, remove the now default .rp suffix before appending .bap
		-Fix: rats patch fwd annot verify: if a terminal is not on a net the call may return -1 (e.g. the net is missing) - accept thta as connection broken
		-Fix: rats patch: back annotation on subc del: check connectivity before connections are removed, else the actual comp del line will always be missing
		-Fix: separate netlist change event and netlist import event; clean up netlist patch list only after an import so back annotation entries are not lost accidentally (because they are already done on the board) without a forward annotation
		-Fix: low level poly copy call should copy ->enforce_clearance so it is not lost on a through-buffer round-trip (including double clicking a polygon)
		-Fix: do not consider aux layer when sizing subcircuit bbox
		-Cleanup: rename PCB_RPE_ATTR_CHG to PCB_RPE_COMP_ATTR_CHG as it deals with components only and there would be another for nets
		-Cleanup: rename RATP_CHANGE_ATTRIB to RATP_CHANGE_COMP_ATTRIB to make room for network attributes in back annotation
		-Add: Net(remove, netname): remove a net (remove all connections of the net; back annotated)
		-Add: expose net patch remove API
		-Add: extend the rats patch API and action to take file format (more than just old/new)
		-Add: back annotation save: throw error when unknown file format is specified
		-Add: back annotation support for tEDAx backann v1
		-Add: netlist patch: introduce separate net attribute case
		-Add: netlist patch: enable saving tedax backann v2 with "attr_conn" for net attribute changes
		-Add: implement the frame (op dispatcher) of BaSubc()
		-Add: netlist patch: support for comp_add and comp_del; implement BaSubc() action for back annotating subc add/del
		-Add: netlist patch: implement is_subc_created_on_patch() to avoid duplicate adds/removes
		-Add: when a subc is added for back annotation, also add its main attributes (footprint and value) when available
		-Add: when back-annot removing a subc, first break all its connections (also back-annot)
		-Add: conf node for enabling subc attribute change back annotation
		-Add: make rats_patch_is_subc_referenced() public for propedit
		-Add: file format selector in rats patch export (back annotation export) dialog
		-Add: action BaConn() for adding a new connection to the netlist patch
		-Add: netlist patch: implement low level break conn for single terminal and all selected terminals; BaConn() operation: remove
		-Add: prepare the font save action for saving in different font formats
		-Add: when saving font pass on the format string so the saver can do things differently
		-Add: publish pcb_font_draw_atom() for fontmode preview dialog
		-Add: expose arc centerline bbox calculation function (to be used in fontmode)

	[dialogs]
		-Add: netlist dialog: button for breaking connection (removing a terminal from the conn list of a net), back annotatable
		-Add: netlist dialog: button for adding terminals to nets (with back annotation)
		-Add: netlist dialog: button tooltips mention if a change is back annotated
		-Add: netlist dialog: frame a group of back annotated buttons
		-Add: netlist dialog: del net button
		-Add: netlist dialog: don't let a terminal back-annotation-connect to a net if the terminal is already connected to a net
		-Add: netlist patch dialog
		-Add: netlist patch window: export button
		-Add: netlist patch dialog: remove button
		-Add: netlist patch dialog: print comp attr change differently from net attr change
		-Add: netlist patch window prints comp_add and comp_del lines
		-Add: flag edit dialog: add the same tooltip to flag names as well, check boxes are smaller, less probably to get hover
		-Change: make addconn functions public (preparation for actions)
		-Change: decouple addconn functions from the netlist dialog (preparation for actions)
		-Move: addconn functions from the dialog code to core (rats_patch) to make the functionality available in an action

	[doc]
		-Add: document new Netlist(Remove) for back annotation
		-Add: lihata board v9 (netlist patch details for comp attr and net attr)
		-Add: lihata board format: comp_add and comp_del ops for netlist patch
		-Add: document lihata board v9 upgrade on drawing area box approach instead of width/height
		-Add: empty page for documenting back annotation
		-Add: back annotation: explain how it works, list file format and software versions
		-Add: back annotation: list available operations
		-Add: back annotation: document network related operations
		-Add: back annotation: mention the back annotation window
		-Add: back annotation: add/del subc
		-Add: back annotation: claim net, replace footprint
		-Add: back annotation: attribute changes
		-Add: back annotation: board file formats and versions
		-Add: back annotation: link the pool node for historical aspects
		-Add: BaConn() and BaSubc() action doc
		-Add: backann: CLI for conn add and break: the BaConn() action
		-Add: backann: claimnet has an action for CLI
		-Add: file format doc for pcb-rnd-font-v2
		-Add: lihata versions: list changes between font v1 and font v2
		-Add: lihata versions: list board v9 change: uses font v2
		-Add: lihata board version changelog: text entity flag
		-Add: new tutorial video link

	[export_stl]
		-Fix: potentially uninited stack var options may randomly tunr cutouts on/off

	[font2]
		-Fix: io_lihata: allow lihata font to have any version integer and let the librnd parser decide if the given version is supported or not
		-Add: temporary ./configure --enable-font2 and --disable-font2; requires librnd >=4.1.0; controls config.h #define PCB_WANT_FONT2 for the new font support
		-Add: extra argument for rendering opts when font2 is enabled
		-Add: io_lihata uses font2 when enabled
		-Add: rnd_font_invalid_chars() has an extra argument in font2 API
		-Add: follow font2 API change on thin poly rendering
		-Add: implement the format selector in font save
		-Add: introduce text flag for &entity; substitution
		-Add: io_lihata warns when entity flag is saved in pre-v9 board format
		-Add: extend the low level text rendering API to receive text flags
		-Add: text rendering: execute the entity text flag
		-Add: io_lihata: save explicit glyph advance in font2
		-Add: doc: lihata format: mention nonprintable kerning table chars are in &hh hex index format
		-Add: fontmode preview: hint on key format

	[fontmode]
		-Fix: when converting a font into an editor board, the vertical blue line markers for total width are placed by the wrong calculation (calculation differing from the one done by the rendering code)
		-Fix: setxdelta: rather recalculate arc centerline bbox instead of depending on naked bbox and thickness
		-Add: store a pointer to the original font so metadata can be reproduced on save
		-Add: font2: preserve input kerning table and input entity table when converting back from graphics to font for save
		-Add: draw baseline when available
		-Add: FontBaseline() action to create or modify the baseline
		-Add: preserve tab_width and line_height on save
		-Add: font mode preview dialog and action

	[io_altium]
		-Fix: terminate reading padstack after 4 fields, even if the 4th is not a terminator
		-Add: support for global clearance (gap) for rules with all-all expression

	[io_lihata]
		-Cleanup: remove excess newlines from incompatibility list items
		-Add: EXPERIMENTAL: register board file format version 9 (mainly for the back annotation upgrade and new font support)
		-Add: introduce experimental v9 board format for the new netlist patch instructions
		-Add: support for loading and saving comp_add and comp_del netlist patches in the v9 board format
		-Add: board v9: save full drawing area box instead of just x;y (width;height) so that negative coords are fully supported by the file format
		-Add: font2: save new font fields in v9
		-Add: accept lihata format with version suffixes in the call writing font files; if format string ends in v2, set wrver to 9, put v2 in header and save in the v2 font format

	[io_pcb]
		-Add: test parse before old font open: ignore files that don't look like an old font file so syntax error is not thrown if the file is a lihata font

	[lib_bom]
		-Fix: don't crash if sort_id renters to NULL string

	[lib_polyhelp]
		-Fix: triangulate using doubles because coords are at least 32 bits but may even be 64 bits

	[menu]
		-Add: window menu item for the new back annotation dialog, key binding: {w b}
		-Add: subc context popup: back annotate add/del menu
		-Add: subc add/del back annotation (object and selected) in the back annotation menu
		-Add: font editor preview (and table edit) in maintenance

	[poly]
		-Add: #define PCB_WANT_POLYBOOL when the new polygon lib is enabled

	[propedit]
		-Fix: network attribute changes should cause net attrib netlist patch lines, not comp attrib lines
		-Add: propedit dialog: checkbox for enabling attribute back annotation
		-Add: propedit dialog: update subc attr back annotation checkbox from the config node
		-Add: propedit dialog: set backann config node when checkbox is changed
		-Add: add subc attribute changes to back annotation list when the config node enables that
		-Add: prepare the code for back annotating terminal attribute changes (attr_pin) but don't do it yet because forward annotation doesn't deliver them so they can never be removed from the patch list

	[sign]
		-Add: new repo.hu crl for 2023

	[tests]
		-Fix: menu test make clean shall remove all the .out files

	[tool_std]
		-Fix: the insert tool shouldn't allow inserting a point in a rat line (doesn't make any sense)

	[trimesh]
		-Add: new plugin; TriMesh() action and infra (triangular mesh for simulation)

	[tutorials]
		-Update: main "getting started" tutorial replaced with a new record

pcb-rnd 3.1.2 (r38167)
~~~~~~~~~~~~~~~~~~~~~~
	[acompnet]
		-Cleanup: replace compat rtree with native

	[autoplace]
		-Cleanup: replace compat rtree with native

	[autoroute]
		-Cleanup: replace compat rtree with native
		-Cleanup: remove inline, use portable RND_INLINE instead

	[build]
		-Add: ./configure --enable-polybool and --disable-polybool (default for now) to allow testing the new poly lib later on

	[ch_editpoint]
		-Cleanup: remove rtree2_compat.h dependency

	[ch_endpoint]
		-Cleanup: replace compat rtree with native

	[ch_onpoint]
		-Cleanup: replace compat rtree with native

	[core]
		-Fix: poly as-drawn frame annotation option also draws cutout contours
		-Fix: allow padstack convert from selected work in footprint edit mode
		-Fix: pcb_flag_uninit() should clear all fields (flag bits), not just the unknown-flags part
		-Fix: do not uninit flags while gui-erasing objects
		-Fix: no-effect poly clearance change operation wrarning message doesn't refer to obsolete MinClearGap() but offers modern alternatives
		-Fix: verify number of points in a simplepoly when drawing/decomposing font; skip and warn if there are too many points
		-Fix: font unlink: when the default (system) font is unlinked, cheat: make a copy and return that; this is required for the font editor because the board struct hosting the default font is soon to be free()'d
		-Fix: pstk thin draw: don't draw mech layer twice because it will make the object inivisible in xor-draw
		-Fix: remove padstack mirror optimization: there are cases when ps->y is 0 but we still need to change the coords
		-Fix: revert should do the same PCB drawing area bbox tuning that normal load does, when pcb is a footprint; this fixes the problem of not updating drawing area of growing footprint on reload-on-change (which is really a revert)
		-Fix: when subc is moved to buffer (most notably to removelist), rebind subc layers to the buffer after all the objects have been moved; without this, free'ing the subc (e.g. clearing the undo list which clears the removelist which frees all objects there) would leave ghost objects on the rtrees because at subc free the rtree is NULL so child objects are not removed from the rtree but those child objects are freed
		-Cleanup: rename pcb_flag_erase() to pcb_flag_uninit(), as "erase" is used in the gui redraw sense; the confusing terminology already caused the call to be in the wrong place for all objects
		-Cleanup: remove inline, use portable RND_INLINE instead
		-Cleanup: centralzie flag uninit on object free, into obj_common
		-Cleanup: remove old rtree compat, use native rtree instead
		-Cleanup: remove unused/unimplemented function proto (pstk clear draw)
		-Add: more sophisticated thindraw shape selection for drawing from buffer: pick top copper or bottom copper first and fall back to first shape only if those are not found; this avoids picking the mech shape for the main contour

	[dialogs]
		-Cleanup: replace compat rtree dir consts with native
		-Fix: don't crash when help text is NULL (not available) for a parametric library entry
		-Fix: library parametric window command generator: corner case when there are no optional parameters (force generating all parameters that are not unknown)

	[distalign]
		-Cleanup: remove inline, use portable RND_INLINE instead

	[doc]
		-Add: document the templating system of the new export_bom plugin
		-Add: link in export_bom doc
		-Add: export_bom: document skip_if_empty and skip_if_nonempty templates
		-Add: export_xy skip_if_nonempty
		-Add: document outline and cutout mechanism including centerline defined cutouts and slots

	[draw_fab]
		-Cleanup: remove rtree compatibility dependency on determining if rtree is empty

	[export_bom]
		-Add: rewrite the plugin; switch over from hardwired format to templates (user configurable)	[export_openscad]
		-Fix: min-max value for fs so it can be changed from the GUI
		-Fix: adjust model placement so it considers top and bottom copper thickness
		-Cleanup: remove rtree compat dependency
		-Add: support for --fs to set arc resolution
		-Add: export options to override default colors
		-Add: export cutouts & slots
		-Add: make exporting cutouts optional

	[export_ps]
		-Fix: finish previous file before starting a new file (fixes missing showpages)

	[export_stl]
		-Fix: switch over to generate all cutouts as an rnd_polyarea_t so that overlapping cutouts wouldn't cause broken export anymore
		-Cleanup: remove rtree2_compat.h dependency

	[export_xy]
		-Update: export_xy doesn't depend on export_bom anymore
		-Add: skip_if_nonempty template, to control which subcircuits to skip
		-Add: default templates: skip subcircuits that have the dnp attribute set

	[exto_std]
		-Cleanup: replace compat rtree entry with native

	[fontmode]
		-Fix: RND_EVENT_DESIGN_SET_CURRENT always requires an argument, even if it is NULL

	[footprint]
		-Add: openscad model for all parametric footprints in the default lib
		-Add: 3d related optional arguments in parametric footprints

	[gsch2pcb-rnd]
		-Del: remove the code, replace it with a long explanation on how to substitute it

	[import_ipcd356]
		-Cleanup: replace compat rtree with native

	[import_ttf]
		-Add: slice up large polygons so the resulting simplepoly always respects simplepoly size limitation

	[io_altium]
		-Cleanup: replace compat rtree with native

	[io_autotrax]
		-Cleanup: replace compat rtree with native

	[io_bxl]
		-Cleanup: replace compat rtree with native

	[io_eagle]
		-Cleanup: replace compat rtree with native

	[io_hyp]
		-Cleanup: replace compat rtree with native

	[io_kicad]
		-Cleanup: replace compat rtree with native

	[io_lihata]
		-Cleanup: replace compat rtree with native
		-Fix: when saving polygon coords in a lihata table, make sure col allocation is also set so table cols are allocated to the proper size, not to 0 size

	[io_mentor_cell]
		-Cleanup: replace compat rtree with native

	[io_pads]
		-Cleanup: replace compat rtree with native

	[io_pcb]
		-Cleanup: replace compat rtree with native

	[io_tedax]
		-Cleanup: replace compat rtree with native

	[jostle]
		-Cleanup: replace compat rtree with native

	[lib_bom]
		-Add: generic, reusable templating for BoM exporters

	[lib_compat_help]
		-Cleanup: remove rtree compat dependency from layer compat code

	[lib_polyhelp]
		-Cleanup: replace compat rtree with native
		-Add: API to generate a multi-island rnd_polyarea_t of all cutouts that are within a given contour
		-Add: topoly_cutout: include mech layer lines and arcs with their true shape so that slots work as expected

	[libcdtr]
		-Fix: there is no local genvector in pcb-rnd's src-3rd, use librnd's
		-Cleanup: remove inline, use portable RND_INLINE instead

	[millpath]
		-Cleanup: remove rtree compat dependency from toolpath calculation

	[oldactions]
		-Del: MinClearGap() action implementation
		-Add: MinClearGap() also suggests using polygon side clearance

	[polycombine]
		-Fix: set the standard clearpoly flag instead of an unknown-flag (string) on the resulting poly to get it behave as normal polygons do

	[puller]
		-Cleanup: replace compat rtree with native

	[query]
		-Fix: advanced search dialog: preserve quotes in strings in decompile

	[report]
		-Cleanup: replace compat rtree with native

	[rubberband_orig]
		-Cleanup: replace compat rtree with native

	[shape]
		-Cleanup: replace compat rtree with native

	[sketch_route]
		-Cleanup: replace compat rtree with native

	[teardrops]
		-Cleanup: replace rtree compat with native

	[util]
		-Add: warning about deprecation of the gnet-pcbrndfwd_elem script

pcb-rnd 3.1.1 (r37572)
~~~~~~~~~~~~~~~~~~~~~~
	[asm]
		-Fix: ignore subcircuits of extended objects

	[cam]
		-Fix: doc_png exports bottom side with flip_y enabled for proper layer ordering
		-Add: doc_eps job to export colored top and bottom in eps for documentation purposes
		-Add: doc_ps job, similar to doc_png and doc_eps
		-Add: doc_ps draws copper faded and silk solid for readability
		-Add: cam job for Advanced Circuits, as reported by Bdale

	[ch_endpoint]
		-Fix: remove endpoint indications (on first subsequent redraw) when tool is switched to a non-indicating one

	[core]
		-Fix: pixmap transformation: avoid sign swap in rotation
		-Fix: scale pixmaps before rotation to keep their aspect if it's not 1.000
		-Fix: find.c vs. disjoint padstacks: set all-copper-conn'd for multi-copper padstacks only if the hole that connects them are plated
		-Fix: find.c vs. disjoint padstacks: don't require plated hole for the single-copper (smd) case
		-Fix: find.c: skip checking bloated up pstk against polygon for isc if clearance is larger than bloat and there's no thermal connecting them (works around line approximation false positive isc)
		-Fix: find.c: switch over from geometric rat-end connection find to (more precise) anchor based when rat anchors are avaliable; this means the rat line is connected only to the two objects it was mapped for; fixes the bug when two nointconn lines touch at endpoint from where a rat also starts and by geometry the rat shorts to two nointconn lines making an internal connection against the user's will
		-Fix: typo: check if rat rtree exists (not padstack rtree) before looking into the rat rtree
		-Fix: when removing a layer, all layers are renumbered; shift the thermal bits (indexed by layer index) in each padstack so thermals remain on the same layer after the re-indexing
		-Fix: allow idpath data address of buffer#n to end in /
		-Fix: idpath data address lookup: boundary check on the buffer array
		-Fix: pcb_idpath2obj_in() should be able to return object from buffer if the path refers to a buffer; provide an _only() variant that excludes the buffer
		-Fix: draw code used the wrong field for applying gui xform, causing conditional jump on uninitialized value
		-Fix: when converting string to thermal bits, accept NULL as empty string
		-Add: initialize new conf node rc.path.dotdir so users can refer to their own config easier
		-Add: hid_cam: support for global opt flip_x and flip_y so that bottom side layer order can be rendered correctly
		-Add: low level cam support for force_nonepty (creates output file even if layer group is empty, overriding the export plugins normal decision, in case the plugin cooperates)

	[dialogs]
		-Fix: reapply filter after a refresh to avoid gui inconsistency between the filter entry and the tree displayed
		-Fix: library window: refresh button shouldn't crash when filter entry is empty
		-Fix: library window on parametric edit: when the parametric footprint fails to produce a valid help text, don't override the filter with NULL string (causes segf)
		-Fix: typo in load file name filter name (should be rp, not rs)
		-Fix: Save() syntax should mention the extra, optional path argument where it is available
		-Add: library window: refine filter text tooltip: mention regex and case-insensitive
		-Add: padstack dialog instance tab displays logical layer id (for reference and to ease debugging)
		-Add: open dialog: file name filtering widget when opening a board

	[doc]
		-Add: gtk4 and sch-rnd formats in datasheet
		-Add: document new openscad export features
		-Add: mention gmail is not supported
		-Add: link in route-rnd
		-Add: FAQ item about high DPI screen icon_scale
		-Add: document cam's global option flip_x and flip_y and force_nonempty option
		-Add: sch-rnd on the bridges drawing and Ringdove listing
		-Add: install resources/ when installing doc
		-Update: conf tree docs generated with the centralzied tool (removing excess pcb-rnd from titles)
		-Update: dotdir node in conf tree doc
		-Update: user manual: prefer sch-rnd over gschem
		-Update: use nlnet logo for the link

	[export_bom]
		-Fix: ignore subcircuits of extended objects

	[export_fidocadj]
		-Fix: ignore subcircuits of extended objects

	[export_gerber]
		-Add: let cam override "layer group is empty" decision

	[export_ipdcd356]
		-Fix: ignore subcircuits of extended objects

	[export_oldconn]
		-Fix: ignore subcircuits of extended objects

	[export_openscad]
		-Fix: don't hardwire pcb_ prefix in generated scad script, read it from a global var so later it can be changed
		-Add: export option 'prefix' to change module names to allow multiple exports to be used in a single large project
		-Add: do not hardwire board thickness 1.6mm but use the standard thickness query between top and bottom copper
		-Add: support for openscad-origin (object attribute) to set 0;0 of the board on the x;y plane

	[export_ps]
		-Fix: restore config after the export so that forced conf sets (like flips) are reverted
		-Add: set librnd's ps_faded before rendering a layer, depending on xform->layer_faded
		-Add: let cam override "layer group is empty" decision in both ps end eps
		-Add: --enable-flip in eps to respect flip_x and flip_y

	[export_stl]
		-Fix: ignore subcircuits of extended objects
		-Fix: initialize triangulation pool large enough to host cutout coords as well
		-Fix: use rtree search for cutout objects so that ones from subcircuits are picked up as well
		-Fix: remove temporary cutout polygons before uninitializing the cutout poly vector
		-Fix: separate export options into per format arrays so file names and other settings are remembered separately when exporting from the GUI

	[export_xy]
		-Fix: ignore subcircuits of extended objects
		-Fix: get the format enum initialized when called from the export() action
		-Add: make enum values (format template names) available for --help

	[exprot_png]
		-Fix: don't override onsolder-rendering in cam mode, let the cam rule decide

	[footprint]
		-Add: openscad: 1008, 1210, 1806, 1825, 2706 SMD model
		-Add: openscad: SOT143, SOT223, SOT25, SOT26, SOT323, SOT232D SMD model
		-Add: openscad: SOT325, SOT325, SOT23, SOT89, SC90, SOD110, SOD80, SOD87 SMD model
		-Add: openscad: SC70_3 uses SOT323 package model
		-Add: openscad: SC70-4 3D model
		-Add: openscad: SOD80 3D model compatible with minimelf
		-Add: openscad: SOD106A, MPAK 3D model
		-Add: openscad: 3 and 5 mm LEDs, TO92, TO39(-3), TO18, OSC14_8
		-Add: openscad: HC49*, HC51, TO220*, TO126, TO251, TO247, TO264
		-Add: openscad: MULTIWATT*, HEPTAWATT, PENTAWATT
		-Add: openscad: 3D model for 6x6 mm tactile switch
		-Add: openscad: BNC, DC power jack, DSUB connectors

	[menu]
		-Add: hotkey {f f s} for import (fetch) schematics

	[oldactions]
		-Fix: ignore subcircuits of extended objects when listing rotations

	[propedit]
		-Fix: relative set on geo fields is not mistaken for absolute set
		-Add: pressing enter in the value input of the "new attribute" dialog should be the same as clicking on ok
		-Add: propset(rename/a/oldname, newname) renames the attribute (in an undoable way) keeping its value

	[query]
		-Fix: query() action syntax includes the optional scope argument

	[renumber]
		-Fix: ignore subcircuits of extended objects

	[tests]
		-Fix: filter out pup soft uninit warning to reduce noise
		-Fix: strflags: wront printf format for unsigned long int in hex
		-Fix: uniq_name: wrong array index integer width for printf %d
		-Fix: cam refs: 0 is written as 0.000 in current code
		-Add: test board for different disjoint padstack-padstack touches for find.c

	[tool_std]
		-Fix: arrow tool timer drops current click timing if the board got unloaded (or switched) meanwhile, to avoid operating on invalid or background board


pcb-rnd 3.1.0 (r37222)
~~~~~~~~~~~~~~~~~~~~~~
	[asm]
		-Cleanup: rename row[] to cell[] (tree code naming convention)

	[build]
		-Cleanup: missing #include (exposed by hid.h not always included)
		-Cleanup: simplify util Makefiles using vars defined in librnd.mak
		-Fix: use detected CFLAGS for compiling utils and tests
		-Change: switch over to librnd4 installation

	[cam]
		-Fix: pass on action design as the design-to-be-exported from the cam action (the code doesn't rely on PCB anymore)

	[core]
		-Del: remove 'reverted' parameter of pcb_board_replaced() - long unused, incompatible with the GUI moved out to librnd
		-Del: config node rc/have_regex: was hardwired 1 for many many years because of genregex
		-Fix: do not export heavy terminal marking (overlay) when when export is done from the GUI
		-Fix: netlist: do not make 0-sized allocation on subnet mapping
		-Fix: crosshair shouldn't register new tools before the GUI is up
		-Fix: respect render-above/render-below setting of the GFX object when searching overlapping objects by location
		-Fix: gfx rotate operations should generate new pixel content
		-Fix: mark the drc flag "omit from list" in flag_str so that the propedit gets to display exportsel which shares the same bit
		-Fix: inhibit menu merges while creating a new board so there's no invalid menu handling by a menu update between the old board already free'd and the new board not yet created
		-Fix: do notdraw pixmap 'X' on missing pxm render if target is an exporter, not a GUI (at the moment the default should be that we are not exporting pixmaps)
		-Change: switch over to librnd's font
		-Change: mark conf setting editor.beep_when_finished obsolete

	[dialogs]
		-Del: preferences dialog, library tab: no need to free tree-table cells, librnd4 will do that
		-Fix: use the right config node path for setting CLI history size in preferences general tab
		-Fix: set expose context ->design before calling main expose
		-Fix: generic view dialog should activate global flip on preview so that the views follow board flips
		-Fix: preferences lib tab: memleak on excess strdup() for 'path expanded' label
		-Fix: preferences dialog, library tab: used the wrong context pointer in the help button implementation
		-Fix: uninitialized variable caused save-as format options showing up randomly
		-Fix: strdup() cell value for cell modification, librnd4 API requires that

	[doc]
		-Fix: list menu keys for all plugins as well
		-Fix: pass on LIBRND_LIBDIR to datasheet.sh when run from Makefile to avoid error on gnuism
		-Update: menu key list: new format, list all plugins, include source
		-Update: key tree svg and txt
		-Add: wishlist items (2023-01 wishlist thread)

	[export_c_draw]
		-Fix: don't use global design when it is available from argument
		-Fix: set expose context ->design before calling main expose
		-Del: don't define set_crosshair, use hid_nogui fallback

	[export_debug]
		-Fix: don't use global design when it is available from argument
		-Del: don't define set_crosshair, use hid_nogui fallback

	[export_dxf]
		-Fix: don't use global design when it is available from argument
		-Del: don't define set_crosshair, use hid_nogui fallback

	[export_excellon]
		-Fix: don't use global design when it is available from argument; set expose context ->design before calling main expose
		-Del: don't define set_crosshair, use hid_nogui fallback

	[export_gerber]
		-Fix: don't use global design when it is available from argument; set expose context ->design before calling main expose
		-Del: don't define set_crosshair, use hid_nogui fallback

	[export_oldconn]
		-Del: don't beep when finishing the export

	[export_openems]
		-Fix: don't use global design when it is available from argument; set expose context ->design before calling main expose
		-Del: don't define set_crosshair, use hid_nogui fallback

	[export_openscad]
		-Fix: don't use global design when it is available from argument; set expose context ->design before calling main expose
		-Del: don't define set_crosshair, use hid_nogui fallback

	[export_png]
		-Fix: don't use global design when it is available from argument; set expose context ->design before calling main expose
		-Del: don't define set_crosshair, use hid_nogui fallback

	[export_ps]
		-Fix: don't use global design when it is available from argument; set expose context ->design before calling main expose

	[export_svg]
		-Fix: don't use global design when it is available from argument; set expose context ->design before calling main expose

	[find.c]
		-Fix: gfx object should return explicit "no intersection" instead of assert so an accidental {c f} over a pixmap won't cause problems

	[footprint]
		-Fix: parametric common: do not generate square pad smaller than 4 nanometer to avoid polygon corner cases
		-Fix: parametric common: minimum thickness for smd pads so there's no invalid poly
		-Fix: common_subc: subc_proto_create_pad_rect() passed the wrong argument to paste and mask offset calculator
		-Fix: common_subc: subc_proto_create_pad_rect() called the wrong function for mask offset calculation (so it used paste defaults when mask was not specified)
		-Fix: common_subc: if paste/mask ratio is empty string, don't use it as a value but fall back on defaults

	[gsch2pcb-rnd]
		-Add: set up exec prefix

	[import_sch2]
		-Fix: don't crash in path resolver when there's no design path

	[io_hyp]
		-Cleanup: decide what to do with parser debug, remove hint on unsupported action arg

	[librnd4]
		-Update: follow librnd4 API changes

	[millpath]
		-Fix: don't call text object decompose with NULL transformation in toolpath calculation, that'd lead to a segfault

	[oldaction]
		-Del: Bell() doesn't beep but throws an error

	[query]
		-Fix: net_len shouldn't crash on boards without any padstack (don't search NULL padstack tree)

	[report]
		-Fix: allow net length (hotkey: {n l o}) searches originating from subc parts (e.g. a terminal) as a fallback

	[tests]
		-Fix: propedit test needs to use locally defined ASSERT(), can't depend on assert() being accessible (it's turned off in production)

	[tool_std]
		-Del: rat line draw doesn't beep when object clicked is not a terminal (this beep was really a no-op in many cases)
		-Fix: allow GFX (pixmap) objects to be locked/unlocked by the lock tool

	[util]
		-Fix: bxl2txt needs to have an extra -I calculated for librnd4
		-Fix: bxl2txt: use the CFLAGS as detected (-O3 and -DNDEBUG for production)
		-Del: deblist.sh - not used by anything anymore
		-Del: devhelper's 404.sh: it's enough to keep one copy in librnd
		-Del: chglog scripts - use the one in librnd
		-Del: include, comment and copyright source crawler scripts - use the one in librnd
		-Del: rename scripts - use the ones in librnd
		-Del: "TODO grep" scripts - use the one in librnd
		-Del: local implementation of awk_on_formats - use librnd's
		-Move: html dialogs generator from doc to util to be shared with other apps later
		-Cleanup: list_dialogs doesn't get dialogs exrta from a file but from a shell var to make the system more modular and easier to reuse
