pcb-rnd 1.2.8 (r15478) ~~~~~~~~~~~~~~~~~~~~~~ - Change: switch over all plugins and core to the new data model [padstack] -Fix: selection bug: if a padstack is a hole only, it's near to the selection box even if no shape is near (because it has no shapes) -Fix: no-shape hole corner case: xor-draw shouldn't try to draw the first shape when there's no shape -Fix: point-in-padstack: check hole even if there's no shape -Fix: don't crash on padstack special case: hole-only padstack -Fix: corner case: don't crash on hole-only padstack -Fix: padstack conversion from object list: when giving an early error on too many objects being converter (compared to available layers), the count shoudl include layer objects only, not the via/padstack that is to donate the hole -Fix: when converting padstack from via or existing padstack, preserve mask layer with LYC_AUTO -Fix: when converting padstack from an existing padstack, also copy the paste layer -Fix: when converting paste or mask objects into a padstack, make sure to use LYC_AUTO - by definition, all padstack mask/paste objects are AUTO -Fix: when drawing a subc pinout preview, figure padstack shape and color by a layer mask, not by an actual layer group (fixes: subc lib preview missing padstacks) -Fix: buffer rotation rotates padstacks as well -Fix: when sending a padstack to the other side, do not invert the rotation angle - side swap does that automatically -Change: place padstacks instead of vias by default - remove the associated brave bit -Add: when drawing a subc preview, also draw padstack holes - all holes except for BB -Add: existing padstack can be source object for a padstack conversion -Add: make the padstack mark (cross) geometry configurable -Add: padstack hash -Add: padstack editor: tooltip on local clearance -Add: padstack editor: short label explaining the difference between instance and prototype setting scope [subc] -Fix: don't warn for unbindable virtual layers (e.g. aux) on undo deletion -Fix: when importing subcircuits using the ElementList(Need), initialize the crosshair so that subc mirroring doesn't catapult the buffer to negative y on placement -Fix: aux layer creation: create it when special point is added even if it is before the normal aux vector creation (suppresses warnings about missing subc-aux layers) -Fix: smash buffer subc detaches the shared rtrees first so buffer rtrees are not double free'd on buffer data destroy -Fix: when moving a subc between buffer to board, set the parent of global objects properly -Fix: when creating aux layer base vectors, take rotation angle in degree -Fix: when sending subc to the other side, also mirror the stack_offs of layers so that inner layers end up mirrored in the stack too -Fix: the buffer tool can replace subc with subc using shift click, saving/preserving all attributes of the original board subc -Fix: safely return the old refdes in subcop_rename so the undo code doesn't get confused -Fix: dyntext corner case: when dyntext evaluates to empty string, return so that no invisible text is produced -Fix: proper object and polygon-clear-polygon clear/restore poly administration when subc is copied from/to the board -Fix: (floater text) remove undo: prepare the remove undo/redo code for subc layers -Fix: prepare the text object buffer move function for subc layers -Fix: spread the 'floater text' subc-part move buffer layer code to arc, line and polygon -Fix: do not allow pasting a second subcircuit in the footprint edit mode -Fix: don't use the crosshair GC hardwired when drawing subc marks (also fixes color bug) -Change: default config: prefer best lihata format over mainline format for footprint save -Add: is-empty call -Add: pcb_subc_new() for orthogonality; same as alloc() but also sets the ID -Add: helper functions to add points on the aux layer and query them -Add: create aux takes an argument for creating the aux layer on the bottom, indicating that the whole subc is on the bottom side -Add: template based subc ID print on the subcircuits overlay layer -Add: hash and eq functions for text, polygon, padstack, subc layers (for use in subc hash) -Add: structure to centralize the reverse transformations of x and y coords for hashing -Add: hide floaters shall supress drawing any object with the floater flag set [layer] -Fix: don't call invalidate_all on layer change notification if we are exporting -Fix: layer creation do/undo - need to store 3 layer indices to be able to inser tbakc the layer at the right place -Fix: when UI layers are free'd, free all layer objects -Fix: layer_is_empty() should consider all subcircuit layers, recursively -Fix: do not treat paste layers specially when deciding whether a layer group is empty: pins and pads are no special case any more -Add: helper function to create missing (internal) substrate layer groups between adjacent copper groups -Add: call for removing a specific UI layer directly, not all layers by cookie [core] -Fix: ignore empty flags when flag lists are loded from string (io_pcb corner case) -Fix: proper error message when registering a hotkey fails -Fix: allow arc delta to be changed to 360, inclusive in the op code -Fix: when a main_action fails, pcb-rnd should return non-zero -Fix: typo in subc rotation code: rotate90 should not do generic rotate but should do rotate90 recursively -Fix: pcb_polyop_change_clear_size() should work on polygons with the clearpolypoly flag -Fix: pcb_polyop_change_clear_size() uses the normal message mechanism to give a warning instead of a show-only-once-popup -Fix: connection loop uses signed integer type so it doesn't go out of bounds if a net contains only 1 or 0 connections -Fix: selection bug: select only on layers that are visible -Fix: issue a layers changed event before layer vis reset on board creation so that the layer selector is not reading into already free'd memory -Fix: When merging new lines, set the search radius to 1 so that existing lines can be found. -Fix: layer-is-empty-pure: in some special cases there's no rtree but list objects, in which case the layer can be non-empty while rtrees seem to be empty -Fix: polygon clearance corner case: a subc may not have a buffer or board parent (lib) -Fix: data-is-empty: if there's at least one padstack or subcircuit, it's not empty -Fix: pcb-printf %mH heuristics for negative values -Fix: don't create layer group name with space in the name (fallback global outline name) -Fix: default board has no space in the name of the global outline layer and the layer is not marked as internal -Fix: don't abort or crash on invalid GC while xor-drawing text with missing symbols (e.g. binary junk) -Fix: drc: proper line vs. padstack polygon intersect (considers Bloat) -Fix: search object by location prefers same-side floater over layer objects -Fix: rotate rounding error (caused subcircuits to lose precision when reverse engineering the rotation angle) -Fix: when loading a footprint, remove the selected and found flags -Fix: when searching for padstack by location, prefer the padstacks that have a shape on the current layer -Fix: CLI: do not depend on order of arguments: the filename can be inserted between any two arguments -Fix: heavy terminal thermal clearance size doubling bug -Fix: polygon insert point was not adjusted correctly with 'all-direction lines' disabled -Fix: disperse "elements" typo ruined the grid for subcircuits -Fix: disperse "elements": remove flicker by using the snapped coords for incrementing the cursor -Fix: double free in conf error message -Fix: ratline operation: pass on the main pointer (deleting ratline using the remove tool shouldn't crash) -Fix: typo in multiple file name error message -Add: give a hint if the config dump action fails -Add: --version prints svn revision as well -Add: handle the is_footprint special case in data/layer loops -Add: configuration node: editor/auto_via to disable automatic via placing globally -Add: XORDrawSubc now draws lines and arcs as outlines instead of thin lines. -Add: XOR draw the current 'pen' when in line/arc/text tool mode -Add: keyboard handling workaround: when US layout is not enabled try to guess from the translated -Add: allow polygons to be rotated by the rotate tool -Add: inhibit poly clipping during buffer operation - clip only once, at the end -Add: utility function that determines whether an object is in the subtree of a data_t -Add: emit board-meta-changed event if the board's Changed flag changes so the GUI can always update -Add: recursive data flag change utility function -Add: infrastructure for tracking files loaded so they can be printed for user's info (PrintFiles() action) -Add: disperse "elements": do not lose objects beyond board extends, ratehr warn the user and restart dispersion on top - overlapping objects are better than lost objects -Add: action PasteBuffer(ToLayout) uses the crosshair coords if "crosshair" is passed as second argument instead of numeric coords -Add: DRC: be able to start network bloat search from subc terminals as well -Add: system() action for testing te lihata pers save table bug [autocrop] -Fix: do polygon clipping only once, after all moves, so poly-poly clearances are rendered properly (also the clipping will take less time) -Fix: do not directly modify the pcb width/height field, use the central call for side effects like crosshair range update -Cleanup: remove doxygen [autoplace] -Add: manual redraw at each end-of-stage for visual feedback -Add: progress bar, so the operation can be cancelled [autoroute] -Fix: remove the clearance value from padstack bounding box while adding them in the routing box set so padstacks with overlapping clearances don't get merged -Fix: off-by-one on route style allocation -Fix: relax the assert()s to allow +-2 nanometer of rounding error on via boundaries -Cleanup: rename structs and typedefs to follow pcb-rnd naming conventions -Change: pretend that terms are manhatten-aligned, otherwise the autorouter asserts -Add: prepare for the generic polygon-is-terminal case -Add: obstacle mapping recurses to subc [conf] -Fix: conf(set,) should update/render the final value even if it was set as native -Fix: command line -c += and ^= should create and manipulate the right policy subtree, not the first "overwrite" [diag] -Add: integrity checks: subc refdes validity -Add: integrity check for terminal name characters -Add: integrity check: subcircuits outside of board extents -Add: data dump action to ease debugging the DRC -Add: DumpLayers(all) prints a complete map and cross-checks [doc] -Fix: don't use absolute url for embedding a local image -Fix: bridges: legacy io_kicad is write, not read -Del: features/ - moved to the pool -Del: gtk3 devel docs: adoc, old plans and file listings, css cruft, ToC -Update: rebuild action reference table with latest version of pcb-rnd and more complete buildin config -Update: developer data model for layers and padstacks -Update: data model drawing and data.html with more struct names -Update: importer code docs for the new data model -Update: plugin creation doc lists all new pup fields -Update: obj func naming concentions for element removal -Change: rewrite the model chapter for the new data model -Add: knowledge pool link from the main page -Add: list OpenBSD as supported platform -Add: link in the mailing list archives -Add: --help in the manual page -Add: developer data model: rtree vs. lists -Add: indent(1) patch for function decl and comment unalignment -Add: make install handles doc/ properly -Add: generate OS package list; package descriptions and metapackage -Add: plugin naming conventions: lib_ plugins -Add: packaging.txt mentions recommends the default package splitup [export_bboard] -Fix: build: explicit dependency on cairo [export_gerber] -Fix: hackvana naming style needs the drill file named .cnc not .drl (reported by Erich) [export_ipcd356] -Change: plugin state: requires full rewrite [export_nelma] -Change: do not compile nelma by default, mark it deprecated [export_openscad] -Add: proper rotation and mirroring for 3d models when placed as subcircuit -Add: incompatibility warnings if padstack hole or subc orientation can not be determined [export_ps] -Fix: always draw with erase color on mask - the ps exporter doesn't support real compositing anyway (fixes missing padstack masks) [export_svg] -Tune: poly bloat value minimized - mostly covers the thin lines missing because of the slicing but does not make noticable difference in size [export_xy] -Fix: use 1 and 2 for Macrofab SMD and PTH (celem says so) -Add: respect the pnp-origin mark of the subcircuit if it exists -Add: macrofab: fill in the last two (optional) columns using subcircuit attributes macrofab::DNP and macrofab::MPN [fontmode] -Fix: make font layer visible by default [fp_fs] -Add: save the output of a parametric footprint gen in a temp file because it will need to be loaded multiple times and rewind() is called on it (because of the multiple file formats) -Add: temporary hack for allowing kicad modules to be loaded from the lib [fp_wget] -Fix: work around wget's buggy error return on succesful non-updating -c [gerber] -Add: when 'copy outline to layer...' is enabled, do not consider affected target layers empty even if their group is empty, because of the copied outline; note: the outline is never empty (implicit board extent outline!) [gtk] -Fix: preview expose area scaling bug: have to tune the expose extents to the actual widget extents else objects beyond the original extent but still within widget pixels won't be drawn -Fix: when picking the default format for fp save, pick the first match, not the last match -Fix: invalidate after propedit val changes so the changes are drawn immediately -Fix: attribute dialog: detect if input is partial or conversion fails and don't change the value to avoid overwriting valid values with invalid values -Fix: do not change DAD widget values if the new value matches the old value, to avoid unnecessary cursor jumps -Fix: allow the lib_gtk_hid plugin to compile as dynamic linked plugin (CFLAGS was set too late) -Fix: handle non-existent/deleted UI layers in the wt selector -Fix: library window: arrow key navigation shouldn't auto-activate levels and parametrics, only static footprints -Fix: library window: page up, page down, home and end are also "arrow keys" and should activate footpritns -Fix: library: untangle ctrl+c from igoring unhandled keys and arrow keys -Fix: library window: accept keypad enter as well for row selection -Fix: help text: invocation lists all known gtk plugins -Fix: config window: don't duplicate the window close mechanism; all signals should call the same code and that code should be prepared for multiple calls (fixes: closing preferences from the window manager then reopening crashed) -Fix: GetXY() presents the query string in the status line -Fix: do not create multiple instances of the command window, just raise the existing instance if needed -Fix: gl: Check for NULL name when setting colour. If NULL, print a warning message and set colour to magenta instead of crashing. -Add: DAD dialog TABBED implementation -Add: gl: draw UI layers -Change: instead of pins/pads and vias, the layer selector has an entry for controlling holes -Change: increase the wait time between param dialog modification and text entry refresh, to allow more time for the user to complete her edits. [lesstif] -Fix: allow drawing UI layers -Fix: duplicate shift+d hotkey in the default menu file -Fix: normal handling of silk, paste and mask layers in the layer selection/visibility mechanism -Fix: present the query string in GetXY -Del: old special case layer selector menus -Add: implement tabbed widget for DAD -Add: attribute dialog should have minimal width and height enforced -Add: apply the central layer alpha setting on rendering -Add: redraw after color conf changed [import_sch] -Fix: debug messages should not be printed to stdout but logged properly, if the new verbose config permits -Add: default value of verbose is false [io] -Fix: when loading element, check for the plugin's element load capability, not pcb load -Change: API CHANGE: test_parse_pcb -> test_parse that gets the expected type of the file instead of a dummy board ptr -Change: footprint load API contains an optional format parameter (just like the board load API does) -Add: API for reporting save incompatibilities -Add: do a test_parse before attemting to parse a footprint -Add: LoadFrom() action respects the optional format parameter when loading an element [io_eagle] -Fix: version parsing now deals with absent '.Z' in X.Y.Z version string more gracefully -Fix: not being able to place a component is not a warnign but an error, as it almost surely breaks the board -Fix: elem text set (which is really just subc attribute set) -Fix: don't add subc instances twice in rtree -Fix: bin: another hole type ID found in the wild, v 5.12 -Fix: bin: can now read new hole type with mask 0xFF53 "hole" -Fix: bin: binary layout hole features now have diameter, drill doubled to get correct size -Fix: bin: inhibit group updates until all groups are read to avoid invalid/missing silk layer problem -Fix: bin: read pad block half_drill, half_diameter as unsigned bitfield too. -Fix: bin: read bitfield as T_UBF not T_INT -Fix: bin: SMD rotation RXXX was not being parsed properly prior to padstack creation -Add: bin: preliminary support for free text block storage in egb_ctx struct [io_hyp] -Fix: write implicit board outline if there's an outline layer but it is empty -Del: old element silk screen draw code - subcircuits don't need silk outline on screen -Change: generated test: get the oblong padstack asymmetric to make it different from the round pad -Add: load padstacks as padstacks, with considering all metal layers described in the file -Add: make sure layer group names are unique on save [io_kicad] -Fix: don't assume the order of the layer stack, different versions of kicad use different order -Fix: don't guess layer type by ID -Fix: do not fake host to pcbnew - write pcb-rnd version info in header -Fix: do not center the drawing in the page (this will be an optional feature later) -Fix: get smd pad and thru-hole pin rotation angle right -Cleanup: major simplification in the internal API of the pad creation code - make the pin code reusable for via -Cleanup: code simplification: now that tally is back in the central pad code, it won't ever be NULL -Cleanup: split paper size heuristics from pcb write function -Change: write.c layer model rewrite - use data tables instead of code hardwirings -Add: generate implicit outline -Add: io compatibility wanrings for term attributes on padstacks -Add: auto layer allocation for the case when footprints are loaded [io_lihata] -Fix: invalid memory write on loading rats (post-id-assignment) -Fix: don't crash on padstack corner case: hole with no shape -Fix: remove trailing \n from error report strings -Fix: do not crash with sparse padstack proto array (using IDs) -Move: automatic p&p and origin code into a common helper function - io_pcb will use this too -Add: support prio: lihata is the native format for footprints -Add: inhibit poly clip while loading a design, apply the clip once at the end [io_pcb] -Fix: when creating a new subc on a data, make sure padstack rtrees are linked -Fix: save may change the logical layer ordering - to keep the GUI in sync, generate a layer change event -Fix: reuse paste and mask layers, by name, to avoid ever-growing number of layes on round trips -Fix: do not export flags that are unknown to mainline -Fix: do not merge element lines on load-to-subc - the loader should not change the data -Fix: don't crash on saving a footprint even if refdes is not set -Fix: insert missing substrate layers after loading the board to get consistent output -Fix: when mirroring a padstack while loading, use pcb_pstk_data_hack, because PCB is not necessarily pointing to where we are loading the padstack into (fixes the 'import .pcb into paste buffer and get bottom side padstacks on the top side') -Workaround: when loading an old fp file, there's no unit format information - use the preferreed hman readable variant over centimils for now -Add: try to guess save unit format variant from the unit styles seen in the file -Add: create explicit paste and mask layers - drawing on implicit layers is not supported by subc/padstack -Add: incompatibility error when saving non-empty mask or paste layer -Add: create the usual subc layer groups and layer bindings when loading an old fp for editing -Add: reverse engineer rotation of subcircuits when converted from element on load -Add: when loading old elements, also mark the pnp point unless the origin should be used -Add: io incompatibility error on save if there are no styles (geda/pcb tends to crash on such files) [io_tedax] -Add: IO plugin registration, bindings for loading and saving footprints -Add: parse pcb hooks for loading footprints from the CLI [libuhpgl] -Add: ignore esc sequences -Add: support for the pen speed (VS) command [polygon] -Fix: increase line endpoint epsilon comparison (see knowledge pool node 'polybug1') -Fix: clearance is generally considered to be part of the bbox for all objects, make it so with polygons too -Add: more detailed error reporting on polygon contour check fail -Add: when self intersection debug is drawn, redraw the offending lines with bright red -Add: line-polyline intersection optionally returns the point of intersection -Add: code that will later on fix the most trivial self intersection polygon cases -Add: delayed poly clipping with dirty flags; poly clip all (forced all-poly reclip) [propedit] -Fix: absolute values for padstack rotation -Fix: padstack map: global clearance value halving is not needed -Fix: padstack clearance set doesn't need to *2 the value -Add: edit polygon properties: clearance [report] -Fix: NetLength works even if there are no elements -Add: report(NetLengthTo) -Add: when printing rat line endpoint groups, print their names too -Add: print parent subc [menu] -Del: nonetlist flag set menu: it was element-only, and there is now a generic flag editor that includes this flag too -Add: 'free rotate selected' menu in the popup [rtree] -Add: switch over to using genrtree instead of the local implementation -Del: remove 'manage' from the API - callers should arrange freeing the tree nodes; a full tree must be dynamic or static, mixed trees are not supported [rubberband_orig] -Fix: rubberband ratlines connected to subcircuits/padstacks -Change: Remove the copper-only constraint; rubberband is an editor feature that should work on any layer [scconfig] -Fix: when building libminuid, expect spaces in CLFAGS and LDFLAGS passed down -Fix: build libminuid using $(MAKE) -Fix: explicit rules to build genlist objects for gsch2pcb-rnd -Fix: add repeat report warning if libxml2 is missing -Fix: make clean (and distclean) removes ojects in libminuid and uundo -Fix: missing dependency for building all genlist objects for gsch2pcb-rnd (workaround for excess smartness of GNU make) -Add: ./configure --profile generates profiling code with gcc (-pg and -no-pie to work around a gcc bug) [teardrops] -Fix: use the central distance calculator instead of a local, non-coord-type-safe copy; also avoid sqrt() -Cleanup: remove doxygen from copyright and remove some dead code -Add: handle padstacks (arbitrary poly shaped pad handling is very limited) [util] -Fix: fp2subc: force saving as lihata v4 so the result is always a subc -Fix: gsch2pcb-rnd: don't embed Install_root in the executable -Fix: gsch2pcb-rnd: typo in LIBDIR_INSTALLED made gsch2pcb-rnd check for the gnetlist backend always fail -Add: script to list 404 pages on the official home page -Add: fp2subc -d (or --debug) option to wrap pcb-rnd in a debugger (e.g. valgrind) pcb-rnd 1.2.7 (r13656) ~~~~~~~~~~~~~~~~~~~~~~ [padstack] -Add: pad stacks: generic object for pins, pads , vias and holes [core] -Fix: when a new file is created by a save and there's no format preference of the board, the "by file name extension" heuristics should pick the matching plugin with the highest save_preference_prio value instead of picking the first available (fixes the bug that new boards were saved as lihata v1 instead of lihata v4) -Fix: conf: mkdir ~/.pcb-rnd if does not exist so user config can be saved on request -Fix: Display(ToggleGrid) action now sets the grid relative to the crosshair, not the mouse cursor position -Fix: Draw buffer lines/arcs as outline instead of thin-draw. Solves problem with zero length lines -Fix: Draw pin/pad labels on top of other layers -Fix: ElementList(): get original-element rotation, offset and side uniformly, both for elem and subc -Fix: Far-side composite silk was being drawn in front-side colour -Fix: SetValue() text scale change with the wrong increment -Fix: buffer is not bound to a board, not even after a board is loaded into the buffer; buffers should be board-neutral -Fix: buffer paste layer binding bug: if the buffer has no layers only globals, don't bother copying layer objects -Fix: check if layer is not null (fixes polygon undo bug) -Fix: data model bug: when deleting an object, it is copied to the list of removed objects; do not clear the parent field after the deletion, but leave it to point to the data of that list -Fix: don't clamp arc angles between 0 and +360 but -360 and +360 - this lets the user explicitly set start angle or delta angle to -90 -Fix: don't select locked objects -Fix: draw padstack holes after padstack shapes (some exporters, like ps, depends on overwriting pixels with holes so holes need to be drawn last) -Fix: import board to buffer layer mixup: the code shall convert all imported layers to dangling bound layers first, then do the binding to the current board -Fix: memory leak: buffer uninit: don't do layer binding right before all data is free'd -Fix: memory leak: default layer names in pcb_data_t destroy -Fix: memory leak: design path and real file name of the board to be loaded in case the load fails -Fix: memory leak: hid color cache destroy should free the names allocated by the lib -Fix: memory leak: on footprint plugin root path -Fix: memory leak: on plugin dir builds -Fix: pcb_loop_layers() doesn't depend on global PCB -Fix: pin/via in box macro: true only if the whole pin/via is in, ring incldued, not if the center is in -Fix: quoted-string printf handles empty string properly -Fix: remove buggy optimization: do not rotate the bounding box on 90 deg rotation, but recalculate - because of our open/closed boxes, rotation breaks the optimization -Fix: remove dangerous pcb_get_num() from the API -Fix: rounding error: repeated 't' and 'T' text value changes won't get the text scale drifting by a few percent -Fix: selection box bug: semi-negative selection failed on lines and arcs -Fix: text draw doesn't blindly trust that the layer is a real layer -Fix: when drawing an object preview, temporary switch off flips -Fix: when drawing objects on bound layers (e.g. a subcircuit for a preview window), use a more advanced color logics: objects on top copper and silk layer should have board colors, the rest should have far-side color -Fix: when importing a board into the paste buffer, do not add the current board's layer stack on the buffer before the load - let the loaded board decide about its layers -Fix: when picking the color for drawing an object on a bound layer, pick the real color right from the config, not the layer's color - layer's color is 'infected' by side flips -Change: rewrite pcb_select_block() with rtrees so it can consider floaters -Cleanup: API in headers shall contain parameter names; remove useless doxygen comments and add shorter, but more useful plain C comments -Cleanup: disperse objects call doesn't rely on PCB -Cleanup: remove PCB-> references from data.[ch]] and from layer rename -Cleanup: remove code duplication in layer rename low and hight level -Del: get rid of vtptr in favor of stock genvector vtp0 -Del: retire free_atexit() - rather depend on uninit functions -Update: Enable cycledrag in rubberband mode -Add: API for properly destroying a HID color cache (to let exporters plug memory leaks) -Add: Backup() action to force a backup - useful for testing dangerous actions -Add: HID config option for enforcing composite draw - requred by png photo mode -Add: Reset the rubberband before looking-up new rubber lines when cycle-dragging -Add: Support for rubberband when moving arc points -Add: crosshair snap: polygon center if the polygon is a terminal and the center point is within the polygon (center as in: bounding box center) -Add: data helper function that lists terminals within data -Add: data mirror optionally mirrors text (by sending text on the other side) -Add: disperse elements now works on subcircuits as well -Add: extend the menu key handling API to receive both the raw base key and the translated key character from the HID -Add: extend the wireframe line draw API so that it has an argument for square cap lines -Add: free-rotate-at-cursor call -Add: function to list objects by type and mask into a pointer vector -Add: generic, flat data iterator on the children of pcb_data_t -Add: import subc, not only element, when replacing existing elements -Add: loop_all and obj_any should include subc -Add: noclip version of the move operation on the basic object types -Add: operation for pure clipping (clearing or restoring poly) of the basic objects -Add: pass a flag to search-by-location to handle floaters; search code can pick floaters over subc -Add: pcb_data_bbox() can ignore floaters -Add: portable fileno() wrapper -Add: portable milisecond sleep API -Add: standard operation: free rotate (on all existing object types of the new model) -Add: text "flip side" is really a latent mirror - give it the usual y_offs so it works properly in subc mirroring -Add: when moving floaters, draw a xor-line back to the origin of the parent subc (emulates moving name of an element) -Add: optional per object color override [layer] -Fix: wrong pcb printf args on layer edit attributes window title build -Fix: when setting up all-layer bindings to a board, do only as many layers as the board really has and remember this number in new data -Fix: layer type lookup shouldn't crash on UI layers -Cleanup: remove global var PCB dependency -Cleanup: remove redundant bound/real .name fields, use a common .name field - both have names and the two fields used to be one the same address anyway -Cleanup: move grp to under meta.real - bound layers are not in groups -Del: old macro to determine if a layer is bound, using indirect data - depend on direct data -Add: copper layer group list cache for fast bbvia lookup -Add: central layer stack free function -Add: function to convert all layers of a pcb_data_t * to dangling bound layers using a reference layer stack [subc] -Fix: LoadFootprint() accepts subc as a footprint -Fix: always display the refdes in the top-left corner of the dashed subc outline, even if the view is flipped -Fix: crosshair object snap: subc origin should be snapped to -Fix: don't draw at every subc op, that slows down rat find -Fix: dup(): copy subc metadata (e.g. attributes) before copying layer data; some layer data, like text bounding box, does depend on this metadata -Fix: include the name of the layer in the error message when a subc layer can not be bound -Fix: instead of direct move, use 3 stage move: restore polys, move, clear polys (fixes Ade's and JG's bugreport about small smd resistor clipping bug) -Fix: keep track of whether a buffer is loaded from the outside or is from the board; when loaded from the outside, subc pasting is affected by current side, else side is kept (this fixes a decade old bg about element having to be put on solder or component side on the moment of load, not on the moment of paste) -Fix: poerply dup the name of layers on creating new subc layers when converting from buffer -Fix: subc load to buffer: list type correctness (subc list instead of element list) -Fix: swap side needs to modify the subc pointer (creating a new subc) -Fix: terminal rendering: use pixel based terminal layer mark size -Fix: update dyntext texts when parent subc attribute changes so that the new bbox is calculated -Fix: when a subc/term poly is copied, it should create its clearance -Fix: when find.c removes flags, it should recurse to subcircuits as subcircuits parts may be found too -Fix: when placing a subc on the solder side, the other-side part of the operation shall not be undoable, it's just part of the placement -Add: DRC silk min width considers arc -Add: Flip() on selected objects includes subcircuits -Add: action ElementList() can replace element to subc -Add: call to determine if a subc is on top or on bottom, using the aux layer -Add: call to send all selected subcircuits to the back side -Add: free rotate operation -Add: free rotate subc when rotating a buffer -Add: helper function for 90 deg subc rotation -Add: high level move() call -Add: implement DRC minimal silk width check for subcircuits -Add: implement nonetlist flag set (alt+n) -Add: implement undoable subc removal -Add: minimal silk width DRC violation: also select the offending lines -Add: prepare ElementList(), ElementSetAttr(), ElementList() for subcs -Add: preview draw function -Add: properly draw the xor-outline of the subc while visualising the buffer, even on the bottom side -Add: search subc by ID -Add: support for loose subc (in-place editing, ignoring the 'subc lock' for subc parts) -Add: the floater flag (and concept); buffer->subc conversion creates refdes text as a floater -Add: when loading a footprint as board (footprint editing), enable loose subc [term] -Fix: poly-poly clearance: consider all layers in the same (real) layer group -Fix: delayed label draw: do not draw layer object terminal ID on board if it's on the other side (mimicks the old pad behavior) -Fix: reset delayed label draw array after each succesful batch draw [thermal] -Add: poly thermal calculations -Add: line thermal calculations -Add: arc thermal calculations -Add: padstack thermal calculations [tool] -Split: tool implementtion from random parts of the code regrouped into per tool files -Add: function callback API for tools [doc] -Change: cut ties with gEDA -Add: minimal description of subcircuits in data model -Add: document padstacks and bbvia in data model -Update: current list of keys -Add: a note about explicit refresh in fp_wget -Add: document what's new in lihata v4 -Add: explicit history section for 2016 and 2017 [autocrop] -Add: move padstacks too -Add: move subcircuits [autoplace] -Add: handle subc and padstack and layer object terminals on connection mapping [brave] -Add: brave mode for testing new feautres (with dialog box) -Add: brave mode for "use padstack instead of via" [draw_csect] -Add: editable outline layer group [dsn] -Add: export subcircuits as parts (without terminals) [export_dsn] -Fix: missing layer name quoting -Fix: don't use g_free() on normal strdup()'d padstack strings -Add: export polygon based heavy terminals of subcs -Add: export subc pins [export_png] -Fix: photo mode mask broke because of lack of proper compositing; add basic compositing draw -Fix: force compositing draw in photo mode, as photo mode will try to combine the output layergroup by layergroup and non-compositing may merge multiple groups in a single session -Fix: properly draw darkish shadow for all internal/other-side copper layers in photo mode -Fix: always do the fr4 color bending, not only on 2 layer boards -Fix: free erase and im after finishing the export so that a new export won't inherit a potentially smaller image buffer; this fixes 'mask drawn too small' -Fix: memory leak - free all the large image buffers after finishing the export -Fix: memory leak on colors and brushes -Tune: photo mode mask shadow color [export_ps] -Fix: --ps-color got in a never-running part of the code after the composite layer rewrite -Fix: drawing drill holes -Fix: overflow in media size [export_svg] -Fix: implement missing fill_poly_offs - required for exporting padstacks [extedit] -Add: new plugin for external edit of subcircuits [fp_fs] -Fix: silently ignore .lht and .subc.lht suffix when matching unsuffixed footprint names so subcircuits are found [fp_wget] -Fix: broken string end comparison -Fix: if wget fails, remove the partial/empty download so thet cache doesn't get fooled by the file date [gtk] -Fix: use the proper function to destroy the command dialog. -Fix: proper toggling of plugins/hid_gtk/use_command_window conf. setting -Fix: display/hide the embedded command combo box, in fullscreen too. -Fix: proper management of timer avoids a GLib-CRITICAL -Fix: property editor preview: memcpy from the wrong layer stack -Fix: text scale change should get the status line redrawn -Fix: partial fix for non-US keyboard issue; introduce in the menu files -Cleanup: use a generic status line update instead of many copies of the same function -Change: do not thin silk lines and arcs for element preview: this feature won't be available for subcircuits -Change: don't set termname on pins and pads when making the preview dialog so that later the copy can be avoided -Change: "element" preview upgraded to generic object preview so that it can display subcircuits too -Change: Full Screen button is now a smaller icon button. -Add: implement the attribute dialog widget hide/unhide API -Add: DAD set() can set the label on a button -Add: attempt to explain window geometry save error (after failing on a missing project or read-only user config) [hid] -Fix: in gtk, the only safe way to unwatch a file from a watch callback is using the return value; upgrade the HID API to support this usage of the callback return value; fixes subsequent calls of extedit -Cleanup: remove PCB_HATT_MIXED: we have PCB_HATT_COORD for the common case instead, and the uncommon case should be solved using a HBOX -Add: When drawing lines, treat negative width as pixels instead of world coordinates (marks/labels can be drawn in pixel widths) -Add: DAD boxed and tables are scrolled when the scroll flag is set -Add: new API for drawing a filled polygon with offset -Add: DAD interface for coord edit -Add: api for hiding/unhiding widgets on an attribute dialog -Add: DAD support for REAL fields -Add: DAD support for uninitialized dlg (to be used in structs, for non-modal support) -Add: attr dialog API adds a new argument for dialogs being modal (so that non-modal DAD dialogs are possible) -Add: event callback in the 3-stage DAD API; attribute dialog button event for window close [hid_gtk2_gl] -Fix: Zero length square capped lines were not drawn -Fix: GL HID was drawing far-side silk on top -Add: Draw local grid in GL hid [import_*] -Fix: cancel on import doesn't mean syntax error [import_hpgl] -Fix: use only as many layers as many pens are in use in the file; name the layers by pen number [import_sch] -Fix: proper subst in schematics path [io_eagle] -Fix: correctly parsing larger SMD pad dimensions. -Fix: Rectangle parsing now uses design rule ms_width, reduced code duplication -Fix: parse signal, element, symbol etc name fields as string, not Int -Fix: arc parsing for linetype 127 -Fix: drill and diameter doubled as required for through hole pads/pins -Fix: netlist node names default to pin number if no name string found. -Fix: pathological arcs in binary format with start + delta -Fix: text on layer 51 now created on 21, and invalid element names '-' changed to 'HYPHEN' to fix netlist parsing -Fix: element name substitution if element name is '-' change to 'HYPHEN' -Add: post-processing to fix nested 'signal' nodes; smilie's missing wires are now being parsed. -Add: eagle binary netlist parsing/loading of 'element_name-pin_number' for given net -Add: using binary design rules values for mdWireWire, msWidth, rvPadTop, rvPadInner, rvPadBottom -Add: further clarification of requirements for lib/pkg pin/pad "name" retrieval for nets -Add: reinstate rendering of arcs on tDocu layers within elements, tested in v3 binary -Add: layers 51 (tDocu) and 52 (bDocu) supported as layers in top and bottom silk groups -Add: support for Eagle binary and XML library files (.lbr) -Add: read.c adds description, element given in library file, and NAME, VALUE to footprint generated -Add: support for loading dru parsing [io_kicad] -Fix: correct handling of (at X Y rot) rotation value for footprint padsw! in layouts -Add: support for title_block, and fixed premature module parse termination with unsupported fp_line layers [io_lihata] -Fix: when loading a subc, ignore floaters in bbox calculation -Fix: parse element does the same footprint search procedure as io_pcb does -Fix: don't attempt to close the footprint file when open failed -Fix: when loading polygon points, set X2 and Y2 to 0 to keep compatibility with the poly code assumptions - fixes random-jumping poly corners -Fix: respect the version the user request for saving a subc in, but bump it (and warn) if there are padstacks in the subc -Fix: when loading subc from file, parse the version separately and accept anything from v3 up -Fix: when loading subc as a board, make sure all polygons are clipped -Fix: memory leak: free error message string after load -Fix: memory leak: free() polygon point table cells before overwriting them -Fix: memory leak: macro parameter evaluation side effect caused multiple copies of whole subc subtrees never getting in the final document tree -Del: remove the hackish PCB swap - now that the layer code is PCB-safe -Add: lihata format v4, support for padstacks [lesstif] -Fix: Tool ghost is shown, now. -Add: DAD: implement the attribute dialog widget hide/unhide API, make sure hbox/vbox/table widgets are stored -Add: DAD: set() can set the label on a button -Add: DAD: support for non-modal attribute dialogs -Add: DAD: ok/cancel button callbacks on attribute dialogs [mincut] -Workaround: broken find.c returns rat point as rat line -Add: show a progress bar after 1+ second of mincut hunting; cancel should revert to dumb indication [polygon] -Fix: poly-poly clear and restore shall not run on polygons that are not part of a board (e.g. buffer polys) -Fix: bounding box calculation allows negative coordinates -Fix: recalculate bounding box after 90 deg rotation - simply rotating the box won't work because the box is 'closed' (increased by 1 on the bottom and right) -Fix: coord size assumptions -Fix: poly-poly clear: always execute ppclear and pprestore on a board layer -Fix: poly-clear-poly: if two clearing polys collide, the code shouldn't return error, that'd cause other, legit clearances to be omitted (there's no real poly z order) -Fix: undo/redo clearance asserts: high level poly code should not attempt to clear/restore polygons on pcb_data_t that is not the data of a board -Add: low level function to calculate whether a line interstects with a pline -Add: low level functions to efficiently determine whether a circle is within a polyline or corssing a polyline (or out of the polyline) -Add: helper functions to peek into the vectors for previous/next contour point without bumping the iterator -Add: inline helper function for setting up a polygon iterator on a polyarea -Add: low level polyarea move function [report] -Add: report unclipped poly area (using currently active unit) -Add: search padstacks for holes [rubberband_orig] -Fix: Rubberband lines with pins/pads didn't always work or could crash due to uninitialised variable -Fix: Don't create more than one rubberband object per line when checking polygon connections. -Add: Rubberband support for subc polygons -Add: Rubberband support for subc line terminals -Add: Rubberband support for subc arc terminals [scconfig] -Fix: unportected "." in regex made tool_lock.c look like a _l.c generating broken C compilation rules -Fix: libminuid should be compiled with the CFLAGS and LDFLAGS detected -Fix: map_plugins.sh warns for invalid default -Fix: map_plugins should sort deps for reproducible output -Fix: instead of guessing where to include opengl from, rely on the include prefix detected by scconfig -Add: define PCB_INLINE to simplify the code for static inline functions -Add: proper detection of fileno() - it's _fileno() on windows -Add: detect GLU if hid_gtk2_gl is to be compiled -Add: detect GLU and generate opengl.h accordingly [select] -Fix: missing case for box-near-check for element-text (made unselecting refdes hard) [shape] -Add: shape generator, with dialog box support [smartdisperse] -Fix: don't cast coord to long - coord may be wider -Add: handle subcircuits -Add: mark non-selected-visited should work on subc as well [undo] -Fix: a totally empty undo buffer is not an error, not even if serial==0 in this case -Fix: pcb_undo return value was not consistent, now it returns -1 on error and 0 on success [util] -Fix: keylist cleans up strings in the key column so "/" is properly displayed -Update: teach keylist to recognize in key bindings -Update: gsch2pcb-rnd help text to reflect the new way the import works -Add: install fp2subc pcb-rnd 1.2.6 (r11992) ~~~~~~~~~~~~~~~~~~~~~~ [core] -API CHANGE: the attribute system requires unique keys per attribte list; this will keep things concistent as the code used to silently ignore redundant attributes -Fix: don't merge lines (when drawing extension of an existing line) if their clearance differs -Fix: pcb-printf: %mk really prints decimil and not some random "sane" unit -Fix: Mode(escape) should undo Note as well, so if the mouse button is still pressed there won't be a selection box after the release -Fix: select polygon only if the negative selection box really touches it -Fix: function pcb_is_arc_in_rectangle besides crossing, now checks if a whole arc is inside a rectangle -Fix: select arc only if the negative selection box really touches it -Fix: remove duplicate lists of "what flags this object type can have" - rather have a function that calculates it from the flag_str table and cache it -Fix: data bbox shouldn't improvize per object type but should depend on each object's bbox calculation function -Fix: don't change the ID when text is put on a layer - instead, invent the ID when the text is created (to prevent unintentional ID changes, e.g. on lihata load) -Fix: rotate line point relative to the passed rotation axis, not the line endpoint (fixes undo rotate bug) -Move: flag help text from doxygen comments to the struct so the code can use them -Add: attribute post value changed callback -Add: copy-back API in attrib that minimizes changes (helper for HIDs) -Add: new interpretation of clearance=0: same as if the clearline flag is not set -Add: Wireframe draw mode -Add: marker snap depends on config -Add: normalize() action for normalizing (clipping and moving into drawing area) data or the board -Add: pcb_subst_strdup() option for interpreting backslash sequences -Add: flagedit (accessible from the menu) [data] -Change: switch over from old default.pcb and implicit mask/paste layers to new, lihata based 2 and 4 layer defaults -Update: names in the desktop file, to pcb-rnd [dbus] -Del: retire this old, unused plugin [diag] -Add: integrity check: attribute list length -Add: formatted flag dump with new action dumpflag() [dialogs] -Add: new plugin for moving dialog boxes to -Add: flagedit dialog -Add: layer bindings dialog [doc] -Add: new composite render API documentation -Add: explain paste buffers -Add: refine indent recommendations -Add: alien format description: Koen's documentation on the hyp format -Add: minimal openscad documentation and an example model (for 1206) -Add: vendordrill plugin documentation -Add: document distalign -Add: document autocrop [draw_fontsel] -Add: replace font button [export_dxf] -Del: retire the old dxf code - will be rewritten from scratch -Add: new, lht based template for the base dxf as saved from librecad [export_png] -Change: switch over to the new composite HID API [export_ps] -Change: switch over ps output to the new composite API -Change: switch over eps to the new drawing mode API - eps is incompatible with composite layers (lack of features in the postscript language) -Fix: typo made composite layers empty -Fix: proper max val for calib - let x and y calib take values between 0 and 2 -Fix: don't omit drill rings when drill helper is on -Fix: when drawing outline on a drill layer (forced by user option), turn off global.is_drill temporarily to get the right colors [export_svg] -Change: switch over to the new draw mode HID API -Fix: svg_rect() draws clipping properly -Add: disable photo mode for composite (they are incompatible) [font] -Add: be able to replace font in place -Add: be able to replace the default font, font #0 [fp] -Add: accept footprint library search paths starting with '?' - means errors should be ignored -Change: default config won't emit error on missing library path ../pcblib and ~/pcblib [fp_fs] -Fix: don't segfault on tag-looking empty constructs (##) in fp-looking files [hid] -API CHANGE: new hid render API with better support for rendering composite layers groups -API CHANGE: new, Dynamic Attribute Dialog (DAD) API [hid_gtk2_gdk] -Update: Updated the GTK2 GTK HID to use the new HID API -Fix: preview expose saves/restores the base canvas properly so that preview renders don't mix with the main window's -Fix: typo: filled poly should make changes on the clip buffer when in composite draw -Change: replace the mask based composite drawing code with the new composite API -Cleanup: the pixel/clip naming conventions -Cleanup: reorder priv struct members to group available canvases and currently active drawing settings -Workaround: for the flashing subc border caused by xor draw in non-direct mode [hid_gtk2_gl] -Update: Updated the GTK2 GL HID to use the new HID API -Fix: Respect the fullpoly flag when drawing polygons. Draws all poly parts, not just the largest one when the -Fix: Poly islands within holes were not being drawn in fullpoly mode. Reordered the rendering operations so that -Fix: Layer stackup window upside down. The view matrix is now set for each layer group as well as at the [hid_lesstif] -Change: update the mask rendering code for the new composite API -Fix: make sure lesstif cli arg attributes are registered before arg parsing so that CLI args are accepted -Fix: save all pixmaps when drawing dialogs (fixes lesstif dialogs crashes) -Fix: swapped coordinates when panning in dialogs - pan works properly in dialogs even if the board is viewed from the solder side -Fix: set proper background color for preview dialogs -Fix: move blit-to-window code from SHOW_LEAVE to SHOW_DRAW (fixes dialog glitches at mouse events) -Fix: save main_pixmap instead of pixmap (fixes pinout preview dialog) -Fix: don't let scroll go too far from the board - avoids runtime lesstif warnings -Add: support for the new attribute dialog features [import_hpgl] -Add: libuhpgl, a mini-lib for parsing HPGL -Add: plugin to import lines and arcs from HPGL [intconn] -Fix: centralize the element-related so that pin-pad and pad-pin intconn would work too -Fix: short eval code used the wrong check for nonetlist flag indicating intconn jumpers with pins shorted -Fix: remove intconn from flags and make it a good old common struct field - for easier access and cleaner data structs; keep file format compatibility with .pcb, and lihata board v1 and v2 -Fix: do not set ->intconn directly, set the attribute instead and let the attribute post hook set the struct field; this will preserve intconn as an attribute on save [io] -Add: set conf node rc/paths/design to the directory path of the current design; this can be used in paths as substitutions using $() -Fix: don't crash if the preferred IO plugin doesn't offer saving the footprint [io_eagle] -Fix: eagle layer 20 (dimension) [instead of 199 (contour)] now maps to pcb-rnd outline layer -Add: reading in round/square/octagon pin/via flags in binary. Padstacks required for long/rounded. -Add: support for rounded SMD pads. Pads now either square, or round. No roundrects possible yet [io_lihata] -Change: bump the priority of lihata v3 so it's the default save format now -Fix: dummy node should be created with the name the caller requested, not hardwired "attributes" -Fix: make sure to parse attributes after flags - attributes may effect flags -Fix: don't attempt to save attributes of bound layers - they have none -Fix: load the layer combination flag before doing the layer binding -Fix: persistent save shouldn't crash if an in-memory text node has NULL value, it should inhibit saving that node instead -Fix: always save layer's obejcts list, even if empty, so the persister can merge the lists -Add: be able to load a subc as a footprint for editing -Add: from version 3 save and load polygon clearance field -Add: write_element hook in the v3 format - save subcircuits [layer] -Change: default layer group names should contain _ instead of space because group names potentially end up in file names and we don't like space in file name -Change: default visibility turns off mask and paste layers - they are distractive 99% of the time -Fix: loading a pcb into the buffer should convert real layers to bound layers - that's the only way a buffer can work -Fix: update layer color cache on config change -Fix: single negative silk renders properly -Fix: don't consider a copper layer empty if it has only via/pin rings on it -Add: attribute edition of the current layer in the layer popup menu -Add: menu for buffer layer binding change [lib_polyhelp] -Add: PolyOffs() action that duplicates selected polygons with an offset on their size -Add: ToPoly() action that converts any group of objects to a polygon [mincut] -Fix: corner case segfault (reported by barjac) [openscad] -Del: retire the original openscad exporter; full rewrite follows -Add: rewrite from scratch; support board outline, silk, copper, mask and element models [poly] -Add: poly-poly clearance when CLEARPOLYPOLY is set [propedit] -Fix: display clearance as copper-to-copper gap width -Add: force absoltue numeric value with a # prefix - useful for arc angles, e.g. #-90 means "value -90" instead of "decrease current value by 90" [report] -Fix: use uniform terminology for Clearance and arc width -Add: subcircuit report [tests/rtt] -Fix: don't fail if convert(1) (and ImageMagick in general) is not installed -Fix: make clean removes out/*/* -Fix: when dealing with gerbers, don't ignore the drill (*.cnc) files -Fix: remove all nelma png files - not going to compare them -Move: validation helpers into a separate dir to reduce number of files in main dir -Add: composite silk test input [rubberband] -Update: Lines must be connected exactly by endpoints to other line endpoints to be considered for rubberbanding -Fix: rubber band keeps middle line dir now snaps to grid, undo works and fixed artifacts when moving line -Fix: Don't keep middle-line dir if the middle line is parallel to any of the rubber lines -Fix: keep middle-line dir would access the rubberband lines before it had established that there are at least 2 rubber lines. caused a crash [safe_fs] -Add: safe_fs API for wrapping all file and process access -Add: privisions for regex based rules to deny access -Add: API for opening a file with path substitution -Add: API for searching for a file to open recursively under a directory -Add: pcb_strdup_subst() can replace leading ~ with the user's HOME -Add: leading '?' in a search path means optional (don't throw error if doesn't exist) -Cleanup: unify the support of % and $() replacement in paths [scconfig] -Fix: BadWindow bug of hid_lesstif (force-order -lXm before -lXt) -Add: link-time error for using strcasecmp directly or bypassing safe_fs -Add: --force-all to override developer's decision whether a plugin is broken [subc] -Change: subc parent API change: don't return int but the parent subc - same for comparison, but more universally usable for other purposes -Fix: don't lose layer combining flag when copying subc from buffer to board -Fix: when loading subc into buffer, properly set up buffer offsets so that subc origin is the same as the buffer's origin -Fix: flip subc when placing on the bottom side -Add: subc terminals that interact with netlist -Add: understand the refdes attribute; print refdes on the subc layer -Add: gui action for editing attributes of a subc -Add: teach fp_fs to accept subcircuits as footpritns -Add: subcircuit build the layer binding dialog -Add: lock tool works on subc -Add: a subcircuit file can be open for editing, as a footprit file -Add: make sure element smash -> convert buffer to subc path preserves as many element features as possible -Add: poly-vs-poly clearance infra (required for subc terminals) [tests] -Update: conftest for the new conf_update API [text] -Add: new text flag: dynamic string in text (to permit % substitution) -Add: %a.parent.*% parent attribute subsitution [undo] -Cleanup: move undo action related call prototypes in a separate header to match the separate .c -Clenaup: move out slot field free code from the slot allocation code (slot allocation will be genealized) -Del: remove local undo list implementation, switch over to libuundo -Add: dynamic, variable size payload on allocation [util] -Add: bisect helper script -Add: menu2svg: draw the menu system using graphviz -Add: fp2subc: convert footprint from the old pcb format to subcircuit [vendordrill] -Fix: missing else made the loader think /drillmap is not a list -Fix: broken printout units; use %ml for mil instead of manual conversion -Fix: replace all %f with %ml for coordinate prints pcb-rnd 1.2.5b (r10635+bakcports) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Fix: import pcb into paste buffer layer binding bug - Fix: gerber drill file units - Fix: RTT tests shouldn't fail if ImageMagick is not installed - Fix: execution bug fix (do not let action scripts load from board files) pcb-rnd 1.2.4 (r10635) ~~~~~~~~~~~~~~~~~~~~~~ [subc] -Fix: saving buffer elements shouldn't ever save layer data; introduce an explicit flag for indicating the element-only intention to the io_ plugins so they don't have to guess from buffer layer names -Fix: poly plow: don't attempt to plow thermal if we are not on a board (but in a buffer - because of dynamic layer bindings) -Fix: find.c lookup code works in line->poly, arc->poly and poly->poly directions -Fix: autoroute should look at the rtree, not at the lists, to determine (recursively) if a layer is empty -Fix: bboard uses rtree instead of list for determining if a layer is to be exported, because of subc -Fix: don't check buffer validity in core before save, but check it in each io plugin because validity depends on the format -Fix: RemoveList of undo shouldn't set data->parent to PCB, as it is really independent of the PCB -Add: subcircuit object -Add: data model: consistent implementation of parent object, for all existing data -Add: integrity() checks for global object direct parents (via, element) -Add: pcb_text_dup() for pasting subcircuit text -Add: pcb_poly_dup() so that subcircuit paste can copy polygons -Add: poly dup_at() -Add: dup_at() for atomic objects -Add: missing Rotate90 operation for polygons - required for canonical operations on subc -Add: dup() functions for vias -Split: move text's XORDraw out from crosshair.c so that it can be reused in subc drawing -Update: menu files: save buffer is elements or subcircuits; load element/subcircuit in file/import [core] -Fix: break up buffer elements used the same copper layer for both top and bottom pads (bisecting thanks to: miloh) -Fix: limit thermal flag value to the supported range -Fix: don't run export on an empty board: it's probably an user mistake and some of the exporters would crash anyway (reported by miloh) -Fix: line mirror should update bbox and rtree -Fix: pinvia mirror should update rtree and bbox -Fix: arc, line, pinvia and poly mirror won't segfault if rtree is NULL (typical for buffer) -Fix: remaining rats or finishing the rats is no warning, but info -Fix: pcb_trace() should use pcb_printf() for the pcb-specific types -Fix: preserve attributes on line/arc/text/poly dup/copy/move -Fix: when split a line/arc because of insert point, copy metadata from the old line segment to the new -Fix: don't lose via name, number and attributes on copy/move -Fix: find-by-obj shouldn't ignore pads -Fix: Arc intersection bug -Fix: arc polygon clearance bug: arc conversion to polygon broke if radius was smaller than clearance (resulted in broken end cap and self intersection); implement a more expensive but safe way to construct it from three objects - such small arcs are rare anyway -Fix: Moving cursor with keyboard allows now leaving snapped pin/pad -Fix: actions don't rely on implicit XY coords, run the GetXY() (explicit query for coords); makes a difference when called from many -Fix: draw pins'/pads' names above the silk layer -Fix: toggleview() shouldn't crash on no-arg -Fix: when converting a value with unit to coord, clamp the result to COORD_MAX (instead of overflow) -Fix: mirrored pins/pads numbers after board flip -Fix: clearance for odd shapes on square+octagon -Fix: polygon arc clearance drawing rounding error: make sure the last point of the outer arc approximation is drawn; also make sure end cap starts exactly where contour ends -Fix: proper rounding in arc endpoing calculation -Fix: text line rounding error -Add: PasteBuffer() action for moving selection instead of a copy&erase combo (it should keep the ID) -Add: pcb-printf: %mq support (generic, configurable quoted strings) -Add: rtree iterator -Add: y_offs option to all low level mirror functions -Add: low level pcb_data_t move function -Add: pcb_data_t normalizer (to fix up board-too-small and negative coords) -Add: DumpPluginDirs() action and --dump-plugindirs command line switch to ease debugging -Add: central UTC date print for the export strftime %c unification -Add: pin/via and pad hashing functions geared for padstacks (ignore coords and names) -Add: help function to make a net connection list starting from an arbitrary object -Add: poly contour coord map function that iterates over all islands and holes -Add: polygon contour loop helpers -Add: helper function to determine if a pline is rectangle or not -Add: configurable backup format -Add: close polygon hole by double click -Cleanup: arc, line, element, pad, pinvia, poly, rat, subc, text op function names unified [layer] -Fix: don't segfault on resolving a bound layer ID without binding, rather assert -Fix: compositing: the function that decides whether a group is compositing should only care about negative composites -Fix: fake composite draw: optimization that temporarily fixes the composite silk and paste missing select color bug for the most common cases -Fix: do the fake composite layer draw hack optimization only for renderers that explicitly enable it because it interferes with translucency (useful mostly for sw rendering) -Fix: layer group vs. layer confusion made pad->ratline jump in find.c impossible -Add: function to calculate the distance between two groups on the stack -Add: function to count layer groups of a given type stepping through the layer stack in a given direction -Add: when abstracting an intern copper layer, calculate the copper layer offset -Cleanup: rename to pcb_layergrp_* for type naming unification [build] -Update: move genht out of liblihata to get a flat project structure [lib_polyhelp] -Add: function to trace a poly contour, from within the poly, with lines -Add: function to print a pline as an animator script -Add: horizontal and vertical hatching -Add: generic poly contour/hatch action: PolyHatch() [diag] -Add: auto-integrity checks when enabled -Add: check the undo stack integrity as part of the global checks [boardflip] -Fix: make the on-solder toggle flag universal that affects not only elements but text (for mirroring) [dbus] -Change: mark the plugin deprecated [draw_fab] -Fix: drill size units depend on the units setting in gui [report] -Fix: broken tabs [export_xy] -Add: template based output formats -Add: templates for gxyrs, TM220A p&p, macrofab, KiCad .pos -Fix: use the central UTC print function instead of strftime %c -Fix: cookie should not be bom's [export_ps] -Fix: attribute leak on uninit -Fix: arc corner case: don't div with zero if width is 0 -Fix: r=0 arc is a point -Fix: don't use %g for potentially large values, it will break the ps syntax with exponents [export_svg] -Fix: attribute leak on uninit -Fix: detect ellipitcal arcs and refuse to draw them -Fix: warn for elliptical arcs only once per gc (which is similar to once per export) to avoid flood of error messages -Fix: arc endpoint rounding bug; it is more portable and more reproducible to use pcb_round() [export_*, import_*] -Fix: use the central utc print function instead of strftime %c -Fix: import_tinycad memleak: free argc, argv after use by qparse -Fix: export_gerber: use pcb_author() instead of getting the user name directly to allow config override (all other exporters do this) -Fix: export_nelma: attribute leak on uninit -Fix: export_openscad: rounding errors -Fix: export_png: attribute leak on uninit -Add: config setting for default save fp format -Add: io_hyp: write .hyp files [io_eagle] -Fix: bottom side element rotation. -Fix: improved n*90 arc type parsing. non n*90 arcs still need work. -Fix: pad dimensions now being parsed -Add: infrastructure for abstracting the low level tree (xml vs. binary formats) -Add: parse the binary format -Add: "du" decimicron unit to unit.c and unit.h for eagle bin format [io_autotrax] - Add: read Protel autotrax/easytrax board files - Add: write Protel autotrax/easytrax board files [io_kicad] -Fix: ignore objects on unknown or unsupported layers with a bold warning, instead of returnning an error -Add: support for bleeding edge kicad 20170123 and (dimension ...) item on layouts -Add: infra for proper error reporting -Add: save: (descr "description") field to s-expression modules -Add: properly quote strings on save -Add: call the board normalizer after load because kicad accepts negative coords and we don't -Add: workaround for auto-creating In*.Cu layers - kicad seems to do the same [io_lihata] -Fix: when a .pcb backup file would be saved as .lht.lht.pcb, simplify it to .lht.pcb -Fix: starting from v2, save data's number-of-layers, not PCB's - subcircuits typically have less layers -Fix: reset fontkit and default font in parse_fontkit -Fix: remove backup save in .pcb as it has side effects that might change the board _before_ the lht save -Add: format version v3: subcircuits [io_pcb] -Fix: accept whitespace in read-check between pcb and bracket, element and bracket (so valid files are not refused) -Fix: make sure there's a top copper layer and a bottom copper layer when loading an .fp file directly -Fix: creating top and bottom copper should look up the layer group even in non-debug builds -Fix: free default font memory properly when parsing font from file -Fix: font reset mechanism for loading the (optional) font from a .pcb file and for loading a font from a font file; fixes double font load when the default font is changed [draw_csect] -Fix: never draw 0 thick lines, round them up to 1 nm; some exporters hate 0 thickness [font] -Fix: when moving a text without selection, draw the real outline, not the bounding box outline -Fix: generate the font change event after reading the new font, not before, so that the bounding boxes are calculated properly -Fix: generate the font change event with the right font ID -Fix: pcb_font_free() should free polygons and arcs of glyphs and clean the list items for reuse -Fix: don't overwrite valid loaded fonts' ID and don't free them after loading -Add: XORDrawText() draws the real outline of the text, not the bounding box [tests] -Fix: build error in uniq_name (genht moved) -Fix: orig: separate XY and bom testing; the plugin got split long ago -Fix: orig: uniq name for xy tests -Fix: orig: rename gerber3 reference layer file names to match the current stackup -Fix: orig: don't test bottom layer on gerber3: it's empty -Fix: conf and propedit test build: genht relocation -Del: don't set the fab user with a non-standard flag -Add: cli tester for pcb-printf %mq -Add: enable RTT by default [tests/RTT] -Fix: don't consider "can't export empty design" an error -Fix: reset search path for default.pcb so the embedded version is used even if there are others installed (to guarantee persistent IDs) -Fix: use compare(1) for bboard png comparison - different libpngs will result in different binary files -Fix: use explicit TEST author for testing the text drawn on some output -Fix: all-input/all-format test fails at the end if any test fails (but always attempts to run all tests) -Fix: run only those RTTs that have their plugins compiled -Del: remove the breadboard tests for now: these input don't make much sense in that context -Add: make clean removes everything from diff/ and out/ -Add: export test: -v for verbose mode -Add: in verbose mode, print all test names that failed -Update: refs for the new padrot input and rounding error fixes -Update: RTT: gerber refs for drill rounding bug fix and composite layers on mask -Update: RTT: get gerber tests to export the csect [gtk] -Fix: lib_gtk_hid shouldn't use the plugin control of lib_gtk_common (for cflags and ldflags) -Fix: gl: composite layer stenciling -Fix: gl: Disable thin-draw poly filling in the GL gui to match other HIDs -Fix: board-preview sets board extents as drawing size for proper zoom -Fix: undo bug: when gtk needs to run a getxy loop, it shall save the undo serial because the button release event in core is going to restore it -Fix: route style crash on menu: get the menu updated when route styles change -Fix: do not hardwire the .fp extension when saving a footprint, rather use what the io_plugin recommends -Add: create tooltips for the mode buttons -Add: make the DRC dialog reentrant -Add: use the new fp save format conf setting to choose fp format we are going to use -Change: DRC dialog uses the preview widget instead of pixbuf (portability) [doc] -Add: pick and place and xy origin tutorial -Add: implicit outline/origin board example for the xy origin tutorial -Add: design files for via thermals and via shape styles -Add: outline the user facing doc about pcb-rnd data -Add: incomplete intro to the user data doc -Add: initial v1.2.3 action reference appendix page -Add: initial combined pcbfab/pcbCAD/pcb-rnd glossary -Add: initial external resources links page -Add: table of dialog behaviors -Add: developer doc about polygon internals -Update: bridges with 3 new io_; replace graphviz with aagraph -Update: developer/data.html for subcircuits pcb-rnd 1.2.3 (r8962) ~~~~~~~~~~~~~~~~~~~~~ [core] -Cleanup: start remove hardwired global var PCB, make the API take the board pointer as an argument -Del: board color cache - use the conf -Del: no need to set silk layer colors to special, draw.c will handle that -Fix: human readable error message before abort() on unknown hid attrib type on cli-to-attrib conversion -Fix: select element only if its silk layer is visible -Del: show_paste is not a config setting anymore - normal layer group visibility should apply -Fix: ElementList() shouldn't crash on empty footprint description (reported by Evan) -Fix: don't segfault whenloading the buffer fails (e.g. source is non-existing file name) [layer] -Add: compositing layer draw for mask, paste and silk; positive vs. negative, auto vs. manual flags per layer -Cleanup: have a generic, draw-callback based PCB_LYT_DIALOG instead of a layer dedicated for fontsel; this makes it easier to introduce new dialog box layers/previews without having to register new layers -Fix: uninit in layer_vis to remove events registered earlier -Change: new interpretation of the mask draw API in the HID API: it's the generic composite layer draw API -Add: EditLayer() and EditGroup actions for changing layer/group name and properites (+ dialog box) -Add: function to clean up old imports: mark all silk layers auto; used in io_pcb, io_kicad*, io_eagle, io_hyp -Cleanup: get rid of PCB->ElementOn in favor of a layer group based query -Del: remove old config items show_mask and show_paste, use the normal layer visibility mechanism should handle that -Split: split off LAYERVIS_CHANGED from the LAYERS_CHANGED event to provide a cheaper mechanism for the more common case -Add: SelectLayer(): central action -Add: low level group rename functions -Add: low level function to find a group by name -Add: low level group pointer -> ID converter function -Add: low level function to step a layer within a group +1 or -1 slot; insertion of new layers is interpreted in group context,not in logical layer context -Del: old layer move code: logical layer index is insignificant as layers are presented by group orders,no need to move layers on that list -Add: helper function for creating the mandantory silk layers -Add: ToggleView() can expand/collapse and vis/unvis all layers and groups -Add: hid_common function for building a layer menu, at least adding groups and layers -Fix: mark pcb changed when group properties are changed in EditGroup() -Fix: cross section draws "text-with-background" only on the GUI - most exporters won't be able to display this correctly, making the text unreadable [layersel] -Add: new layer selector in the top window; show layers per groups; collapse/expand groups -Add: right-click layer popup (also selects the pointed layer) -Add: layer property inidications similar to cross section view's: hatch for auto, thick border for negative [csect] -Add: properly indicate where the layer would be inserted within the group -Add: add/del/reorder logical layers within a layer group -Add: allow logical layers to be in the paste layer -Fix: allow all layers to show up on the csect drawing, not only copper layers -Add: open popup menu for groups and layers on right click -Add: draw_csect doesn't allow removing the last layer from a silk [eagle] -Fix: make sure both silk layers are set up even if the input file didn't specify them -Add: load and build polygons -Fix: make new lines and arcs clear by default -Add: use md_wire_wire for clearance values on lines and arcs -Fix: put multiple unsupported layers on silk -Add: proper element text placement and rotation [scconfig] -Fix: cquote generates C89-safe long strings using arrays - removes a lot of string-too-long warnings -Fix: use -ansi -pedantic for detections in --debug mode, so the same flags are used for detecting libs and compilation; this should fix the realpath bug reported by Ade -Fix: make sure realpath() gets its _DEFAULT_SOURCE when needed -Fix: -fPIC is optional: many C compilers don't support it [boardflip] -Fix: don't mirror element text unless had to move to the other side [export] -Fix: ps: proper plugin uninit -Fix: stat: don't use read-only string in default attribute val - the gtk gui tends to free() it -Fix: stat: user-input save metadata properly -Fix: stat: use 4-digit year in date, to avoid confusion -Fix: stat: wrong date format, should be iso (reported by Larry) [fp_board] -Add: load board as a footprint library [fp_fs] -Fix: always return error on fp mapping if topdir is not a directory - this how we give other fp_ implementations a chance to map those [gerber] -Fix: board larger than 214.7mm had a coord overflow in drill files with 32 bit coords (reported by Evan) [gtk] -Fix: pinout window size is 0 after opening -Change: propedit preview should use the preview infra instead of pixmap for forward portability -Change: menu: use hbox instead of the accel label hack copied from gschem -Fix: popup menu didn't work since r4248: action didn't consider the extra layer of (private) menu handle -Add: left-click on the layer selector widget pops up the layer popup -Fix: gdk should allow drawing the paste layer -Add: local widget_hide_all() implementation to work around gtk's wise decision to kill off everything that's simple -Fix: don't offer restoring factory default for layers, it's hard to tell what exactly we should do -Add: wt_preview can distinguish right click from pan -Add: esc in command window dialog closes the dialog -Fix: apply Chalres' patch about double command execution on esc -Fix: point-cursor-disappears-if-gpmi-enabled bug; move point_cursor logics from glue to in_mouse, make a permanent override and an explicit "set cursor to mode default" (mode set to -1) that also respects the override -Fix: command entry history upside-down + when number of commands is over the maximum in the history, properly delete the oldest, not the latest -Del: underscore menu mnemonics: no support for that hotkey mechanism in our menus anymore -Add: GL: annoying, bold warning about opengl not supporting composite layers [lesstif] -Fix: non-c89 initialization -Add: be able to show the paste layer -Add: remember both submenu widget and menu button in the lihata node's user_data when creating menus (so that it'll be possible to remove menus later) -Add: implement the remove menu HID call -Fix: remove flags[] entry when a checkbox menu is removed -Add: reuse empty wflags[] slots [io] -Fix: let io_ set Data->loader on pcb load; this gives the plugin a chance to make a decision depending on file content [io_hyp] -Change: enable the plugin by default [io_lihata] -Add: v2 writer makes a layer stack subtree; prefer v2 saver if version is unspecified -Fix: in-place upgrade from lihata board v1 to v2 (bypass the root mismatch error) -Fix: non-lht-board file overwrite: missing or mismatching root error means we need to do a fresh save, not merging but overwriting everything -Fix: when saving v1, make sure the 2 silk layers are at the end of the layer list - old code and the old format requires that [io_pcb] -Fix: when loading a footprint file, properly set up the mostly empty layer stack -Workaround: the total lack of reentrancy... assume fp fopen() may call Parse so initialize globals only after that call -Fix: swap layers so that silks are always at the end (required by old code and the format) [plugin] -Change: use puplug instead of the plugin system mostly inherited from mainline -Change: switch over from manual plugin listing to semi-automated when generating the tmpasm -Add: runtime plugin dependency handling: when a module is selected to be a plugin, its dependencies should be at least plugin (but don't need to be builtin) [png] -Update: new mask draw API; properly draw both positive and negative combinations -Fix: export non-axis-aligned square pads properly (numeric conversion bug turned those into random sized rectangles) -Add: photo-mask-colour options similar to mainline's. -Fix: draw mask layer in 'as shown' only if it's visible [polygon] -Fix: enable DEBUGP() in --debug so we get more detailed error messages -Fix: print animator script with proper coords on stderr instead of old pcb format lines when polygon asserts [ps] -Add: remember last set mask mode -Update: new layer mask API [route] -Add: Allow line-points to be moved using the route code which implements 45/90 mode. Disabled by default with config setting move_linepoint_uses_route -Fix: The 45/90 route rules were disabled if the rat layer was selected but editing other layers. -Fix: original line end point move should manage undo in the new code when route is turned off (bisecting credits: miloh & evan) -Fix: When moving a line-point would result in a 0 length line, the move operation was not applied. [rubberband] -Fix: Draw rat lines directly when rubberbanding to avoid 45/90 rules. -Fix: Rubberband with 45/90 route code failed if both ends of the line moved. -Fix: plugin uninit should remove events registered on init [svg] -Add: preparing for the new mask API: and sections for the mask -Update: new mask layer API: mask set/clear overrides color -Fix: use the "configured" mask color instead of hardwired red -Fix: missing else made the silk use copper color -Tune: "inner" layer shadow has no "3d" depth -Fix: mask rendering logics: always visible in photo mode, group visibility controls it in normal mode [util] -Del: gsch2pcb-rnd: method_pcb - please use method_import instead [tests] -Update: simple gsch2pcb-rnd test: switch from -m pcb to -m import -Update: pcbflags: there's no more showmask config setting -Fix: missing distance calculation function - link misc_util.o in propedit test [doc] -Update: core plugin howto for r8214 -Fix: refine the 3-state wording in src_plugin's README -Update: mods3; work from pup files, ignore the READMEs -Update: plugin creation tutorial for the new plugin system -Add: explain autoload in the plugin doc -Add: mods3: generate plugin dep graph -Fix: html validation, typos (by Larry) -Update: model doc for layer compositing -Add: missing rosetta Makefile -Add: missing explanation for gpmi rosetta 90_clock -Add: bugreporting howto -Add: io_lihata: lihata board version history pcb-rnd 1.2.2 (r8120) ~~~~~~~~~~~~~~~~~~~~~ [font] -Add: multiple fonts: introduce the font kit concept; allow font objects to have a font id -Add: io_lihata support for multiple fonts -Add: io_lihata support for polygon and arc in font -Add: font selector GUI -Add: edit the current font, not font0, and throw an error if the current font is not accessible for some reason -Add: alternative default font with arcs, Herhey font [export] -Fix: ps: don't export zero-radius arc, it would end up writing "inf" after /0 (thanks to John for the bugreport and test file) -Fix: svg: don't export 0-radius arc -Fix: fidocadj: Fine tuned fidocadj text export angle, dimensions, placement -Add: gerber: exporting the cross section layer is optional [footprints] -Add: fp_wget: offline mode: wget the index only if enabled; GUI for manual update -Add: fp_wget: support for edakrill -Add: API CHANGE: the fp rehash function takes an optional pointer to the subtree to rehash; when NULL, rehash everything (as it did previously) -Change: don't merge all local file system trees into fs, keep them separate for less confusion [layer] -Fix: look up component and solder groups before placing a new rat on the GUI so the groups are placed right -Fix: move action doesn't let the user remove silk layers -Fix: removing a layer group removes all layers, including the second -Fix: obsolete direct PCB ref -Fix: when (re)moving layers, reparent the lists after memmove() to avoid broken parent pointers -Fix: buffer operations (mirror and paste): use the buffer's layer list only if it has one - when copying a simple object within the board, there won't be, use the boards' then -Cleanup: remove redundant pcb_layer_lookup_group() - use pcb_layer_get_group() instead -Del: old API, already unused: pcb_layer_create_old() -Del: macro PCB_LAYER_IS_EMPTY() to get the API simpler - just use the direct call, this also exposes the use of PCB in some calls -Del: macro pcb_max_group() -> not PCB-safe [core] -Fix: netlist add action shouldn't segfault on empty/NULL netname or pin name -Fix: convert buffer to element: buggy layer group handling (made solder-side objects disappear; thanks to Evan for reporting this) -Fix: move-selected undo bug: undo serial has to be increased after the paste -Fix: Don't add a via when switching to/from a non-copper layer during line creation -Fix: don't mess up the undo serial when moving an element to the other side from menu (reported by James) -Change: increase the layer limit to 38 for new io_ plugins -Change: move rectangle pad creation to a central function - more and more code depends on it -Add: export version, revision and main paths so that child processes (e.g. parametric footprints) have a chance to identify the installation [io] -Fix: io_lihata: assign unique ID to each polygon point loaded - fixes poly point move undo bug -Fix: io_kicad: parser now copes with absent gr_line thickness definitions -Fix: io_kicad: save fp in s-expression format -Fix: io_kicad: quote module name, as it may contain () -Fix: io_pcb: do not load empty footprint into the buffer, it'd assert later (fixes: parametric footprint with broken params was leading to an assert in the preview) -Fix: io_pcb: force-rename outline and silk layers because the loader will detect them by name -Fix: io_lihata: accept trailing whitespace in boolean values -Fix: io_lihata: don't complain about fonts under io_err_inhibit -Add: io_kicad: eeschema import -Add: io_kicad: recognize layers Top and Bottom -Add: io_pcb: improvise a minimal usable layer group setup if there's no layer group string on the input (thanks to oskay for reporting this) -Add: tEDAx: netlist import -Add: tEDAx: footprint export -Add: tEDAx: footprint import -Add: mentor: plugin for importing edf netlist from Mentor Graphics Design Capture [rubberband & route] -Add: keep line direction of middle line segments (2 lines connected) in rubber band mode (patch by Luis de Arquer) -Add: Rubberband keep direction: Line being moved is constrained to keep direction on preview -Add: optional curved corners; alt+c and alt+shift+c in menu files to change route arc radius [gtk] -Fix: external command window segfault when reopen after a WM close -Fix: preferences dialog: proper refresh of widgets when changing the unit in top window while the sizes tab is open -Fix: fit in 800x600 -Fix: cancel means NO when prompted for creating a new layout (updated ghid_prompt_for() for r7792) -Fix: don't change the mouse cursor in busy mode if the hid is not initialized (led to crash) -Fix: Display the proper pcb-rnd icon for top level windows. -Fix: preferences window: preserve correct tree view selection after Save. -Add: gl support -Add: optional gtk shift workaround for some broken mac+gtk stack -Add: detect if the user clicked on a parametric footprint and present a dialog box with its parameters -Add: gtk's attribute dialog can notify the caller about changes using an optional callback function -Add: global or selective refresh of libraries using the refresh button [lesstif] - double buffer preview [scconfig] -Fix: make clean removes sccbox.o -Fix: generate all files so that make dep works right even with disabled plugins -Cleanup: move out 60 kilobytes of optional junk from Makefile to Makefile.gendep: we may depend on make -f and variable passing if we already depend on gcc for make dep -Cleanup: move compile templates to scconfig/template -Cleanup: rename globals VERSION, REVISION and PACKAGE to have a PCB_ prefix to avoid name collisions [pcblib] -Add: auto generated --help for all parametrics [djopt] -Fix: uninitialized local vars (reported by miloh) [boardflip] -Change: rewrite the board flip plugin to be generic (flipping around X and/or Y, applying offsets) [pcblib] -Fix: unit conversion supports all suffixes the core supports pcb-rnd 1.2.1 (r6916) ~~~~~~~~~~~~~~~~~~~~~ [layer] -Cleanup: better layer group support; clear separation of physical and logical layers; real and explicit layer stack concept -Fix: remove silk and component and solder assumptuion from crosshair and search -Fix: auto enforce drc only on copper layers, remove silk assumption -Fix: autorouter refuses to route on outline; also remove silk assumptions -Fix: teardrop works only on copper layers -Add: cross-section view: an userfriendly, a common, HID-independent mechanism for layer group edit [random i/o and the ecosystem concept] -Add: export_fidocadj -Rewrite: import_dsn, proper parser -Add: import_ltspice -Add: import_mucs -Add: import_tinycad -Add: import_ltspice: parse a mentor netlist -Workaround: SVG: near-360 degree arcs break some of the rendering engines [core] -Add: accept # comments in action scripts -Add: self contained pcb-rnd executable: embedded font and default.pcb -Fix: Draw the correct pin/via shape when the SQUARE flag is set in thin-draw mode -Fix: NoHolesValid cache bit set bug that made silk polys disappear -Fix: do not attempt to calculate bbox of empty elements - throw an error instead and ignore the element (or even assert, in --debug) -Fix: don't depend on layer name for outline -Fix: don't let negative clearance happen -Fix: layer max assert off-by-1 - really allow 16 layers -Fix: polygon arc rounding error when drawing clearance around a pad -Fix: polygon drawn using the poly tool caused crash on save due to overwriting the list-administration when copying corsshair-poly to newly allocated layer poly -Fix: redraw after pin number/name change to get the change displayed -Fix: refuse to create attribute with NULL or empty name -Fix: remove arc endpoint should remove the arc, just like with lines -Fix: when deriving default file name of the board, don't truncate hardwired .pcb, try all io's file extensions until the first that is there [arc] -Fix: arc-in-box macro uses the real bounding box of arcs so an arc can be selected by a positive selection box just barely embedding it [doc] -Fix: html validation and cleanups [drc] -Add: Draw DRC outline of pads when enabled -Fix: Draw DRC outline when moving lines -Fix: Improve the drawing of the DRC outline around pins and vias -Fix: When moving an Arc, draw the DRC outline if enabled. Draw the Arc as an outline instead of thin -Fix: When moving vias, draw the DRC outline when enabled [dynstyle] -Fix: when a new style is created, the gtk-side cache needs to be regenerated [export_gerber] -Add: copy hackvana extensions from mainline -Fix: eagle file suffix bug made top layer and bottom copper layer clash with top and bottom silk [export_png] -Fix: notice gc color and cap style changes and update the brush -Fix: properly draw corner case: full-circle arcs -Fix: scale rouding bugs -Fix: use gc for zero-length arcs too [gsch2pcb-rnd] -Fix: don't depend on scconfig objects, use pcb_concat() instead of str_concat() -Fix: stop fighting with src/ for compiling the src_3rd/ objects, just call src/ for doing that [hid_gtk] -Split: hid_gtk common parts into a lib (lib_gtk_common) -Fix: arc delta angle > 360 means full curcle, don't modulo -Fix: arc endpoint rounding error when drawing with gdk (reported by Evan) -Fix: don't run the netlist window if gtkhid is not yet active (batch mode) -Fix: set the right layer color when changing layer colors - store the context struct for each layer index separately (more memory leaks...) -Del: unused ghid_dialog_confirm_all() and ghid_dialog_confirm() -Del: utf8 dup string is not even used anywhere -Del: free_glist_and_data() is not in use, get rid of it -Del: dead code: ghid message dialog: we use the log now, that should be the only one way to inform the user -Del: unused abort functions -Del: gui-keyref dialog (outdated, hardwired, unaccessible) -Change: About dialog is more gtkish and uses the pcb-rnd logo -Change: disable mnemonics for main menus because mnemonics lets gtk steal our keyboard input [hid_lesstif] -Fix: arc delta angle > 360 is always a full circle, don't modulo -Fix: don't try to change cursor shape for being busy if the hid is not running -Fix: typo in the menu config for show_mask made solder mask unable to display [io_kicad] -Change: use the new, simpler layer creation API -Fix: refuse to use any negative layer -Fix: residual arc format parsing errors; homeomorphic linear mappings R us. -Fix: empty altium2kicad element definitions now imported with a 1nm line at the module centroid -Fix: fixed non cummutative symmetry operations when importing fp_arc and gr_arc elements -Fix: fixed off by one tree traversal error for polygonal zones -Add: Kicad supports arcs on the Edge.Cut layer, now implemented -Add: accept # comments when reading a KiCad s-expr file -Add: improved handling of SMD layer definitions board [io_lihata] -Fix: default output formatting (indentation bugs) -Fix: properly load the outline layer, even if it appears to be in group -1 -Fix: translate the new, rich layer group table to the old, dummy format for saving v1 [io_pcb] -Fix: don't attempt to save attrib with NULL value -Fix: layer number boundary check bug (the legacy +2) [poly] -Fix: poly clipped out of existence can come back without an assert -Fix: when priting 'cleared out of exitence' message, use mm for coords [res] -Add: all new importes in the import menu -Change: default file menu rearranged, import options grouped in a submenu to keep things simpler [rubberband] -Add: Support rubberbanding of lines attached to an arc -Fix: Allow both ends of a line to be included in a rubberband move [scconfig] -Add: detect and use -std=c99 if available, some versions of gcc doesn't go for that by default - we also want to avoid accidentally using extensions in C99 code -Add: detect cairo for the breadboard exporter -Fix: allow parallel build -Fix: mod CLEANFILES takes effect now -Fix: when compiling with --debug, display debug symbols as implicit-enabled in the summary [toporouter] -Del: remove toporouter and gts - we have better alternatives now pcb-rnd 1.2.0 (r5967) ~~~~~~~~~~~~~~~~~~~~~ [unravel] - Cleanup: reorganize the code around object types instead of the old, action-oriented approach - Cleanup: prefix almost all core symbols with pcb_ or PCB_ so the code can be reused as a lib later [doc] -Add: start writing a new user doc [arc] -Fix: broken is-point-on-arc check for large angles (thanks Evan for the bugreport) -Add: angle/radius edit UI [conf] -Fix: don't crash on empty project file -Fix: when creating a new project file root, use the geda project file hash, not the pcb-rnd-config node - the project file is shared among programs [gerber] -Fix: emulate 0 long arc with a 0 long line to work around a gerbv bug -Fix: simpler "do we print this layer?" logics, without caching -Workaround: split >180 deg arcs because some viewers (e.g. gerbv) have hard time interpreting them [gtk] -Fix: route style logics: start out with the copy of style 0; after a deletion inherit the sizes from the deleted style -Fix: don't reuse the static conf chg binding struct of fullscreen with solder side swap - it'll probably ruin both -Fix: update bottom status line after flipping the board [mods] -Move: drill.[ch] to the report plugin -Move: original rubberband code into a feature plugin -Cleanup: convert some GUI HID actions to events so that multiple GUIs can bind to them -Add: plugin frame for import_hyp -Add: remote plugin (HID-level remote control over sockets) -Add: draw_fab plugin behind a stub, move draw fab code from core to the new plugin -Add: new export plugin: export_stat (board statistics) [io] -Add: an extra flag bit to allow non-fatal loads; make sure missing default.pcb doesn't generate an error message -Add: proper handling of multiple file formats and file name extensions -Fix: add new test parse call - fixes false alarm parser error messages -Fix: don't change format on backup and tmp saves -Fix: don't throw the "no font" warnign after loading a footprint because footprints are expected not to have font embedded [io_kicad] - Save and load in the kicad s-expression format [io_lihata] -Fix: don't save invalid nodes in the canonical format (backup saves) -Add: (somewhat selectively) save and load the config subtree -Add: one more emergency save on lihata merge failure and verbose error message with instructions [layer] -Cleanup: convert magic number macros to enum -Cleanup: introduce layer id and layer group id types -Cleanup: more explicit virtual layers -Cleanup: remove the old layer API, including all the SL_ macros -Cleanup: renames and refactoring to make the logical layer vs. physical layer concept more clear -Split: move layer visibility (stack) functions out of layer.c -Rename: mask layer names: use top/bottom instead of component/solder for consistency -Add: UI layers (dynamic allocated debug layers with permanent objects) -Add: new layer name generator, based on flags and virtual layer names [pcblib-param] -Fix: don't lose pad thickness unit when calculating new defaults for qf() -Change: center pad of qf() is generated with no-paste (requested by John G) -Add: qf() center pad paste matrix option (requested by John G) -Add: qf() central pad mask option with cpad_mask; when not set, calculate it from pad geometry -Add: qf() got a new rpad_round boolean; when manually set to true, generates round pads [svg] -Fix: arc support: use the large and sweep flags of svg path arc to get true PCB arcs -Workaround: full circle arcs - the two endpoints should differ -Workaround: make endpoints differ in a 0 deg long arc [tests] -Cleanup: update and enable most of the tests, unified output, central make test [util] -Add: prj2lht: script to convert old projects to new -Fix: install the import schematics scm script in our own LIBDIR, because it's not reliable to find the gschem installation, rather use -L for gnetlist [scconfig] -Change: use $(MAKE) instead of make - this allows GNU make to run recursive parallel compilations (reported by Dima) -Change: disable bison by default; use --enable-bison for developing the grammar -Change: do not use gts for anything if toporouter is not configured -Add: extra error if explicitly requested things differ from the results we got -Add: make clean/distclean removes more scconfig related leftovers -Add: optional support for DESTDIR for Debian [core] -Fix: C89: do not depend on or strcasecmp, implement our own -Fix: HID API bug: invalidate_lr needs pcb_coord_t instead of int -Fix: action Netlist() subcommand add modifies the INPUT netlist, not the EDITED because this is used bu import_sch -Fix: attribute deletion by index didn't move all items properly (affects mainline as well) -Fix: disable cycledrag when rubberband is enabled (they are incompatible) -Fix: don't close a polygon twice on normal finish (fixes the excess need 3-point error message) -Fix: don't crash when a pin/pad number is NULL -Fix: don't warn for second hit on a plugin already loaded as long as the hash is the same -Fix: get rid of pointerlist in favor of vtptr -Fix: incorrect flag struct comparison; may have caused unpredictable undo bugs -Fix: line-line intersect code detects and handles the corner case of parallel lines properly (checking wheter endpoints of lines are on the other line) -Fix: make data bounding box function reentrant -Fix: make move macros safer with the standard do { } while(0) wrapping -Fix: make text, arc, line, pad, pin/via move macro safe: don't evaluate arguments twice, wrap in do {} while -Fix: move an object by 0 pixels shouldn't inhibit all subsequent redraw -Fix: negative selection box: limit box coord orders to two canonical forms, one positive, and one negative (fixes north-east to south-west selection on component-side view) -Fix: pin move is really the same thing as via move, use the same macro -Fix: polygon mirror should update the rtree (reported by Chad) -Fix: rename old, gui-hid-defined Export() actions to ExportGUI (matching the ImportGUI()) - Export() is the name of the builtin, core action -Fix: text rtree handling bug: EraseText should NOT have the side effect of removing the text from the rtree but the callers should do all rtree manipulation as needed -Fix: undo text flag bug: add text join undo as text flag change, not as line flag change -Fix: update rtree when mirroring arc in buffer -Fix: use COORD_MAX for large coord values, don't assume coords will be 32 bits -Fix: use the hid name passed with --gui, even if --gui is not the first argument; also allow using --hid instead of --gui (less confusing) -Fix: when snap off, don't crash when action helper is trying to figure the endpoint of an arc -Cleanup: classify all messages to be warnings, errors or info - no more PCB_MSG_DEFAULT -Cleanup: remove unsafe (non-reentrant) arc ends query -Add: --dump-plugins --dump-plugindirs CLI commands and DumpPlugins() and DumpPluginDirs() actions -Add: central Export() action instead of gui-specific ones - this works without a GUI HID -Add: conf setting to disable negative-box selection -Add: conf setting to make negative-box selection symmetric (ignore Y coord sign) -Add: support route style attributes ### NOTE: changelog for previous versions can be found in Changelog.* ###