Summary of changes and fixes to each release of GBRUnion DLL.
This fixed problem of incomplete unionization. There were exceptions encountered that were not handled. This caused some data to be output without having been unionized.
Revised GerberUnion flow to skip Gerber SR cellWhen sizing iS nonzero, the program that optimizes unionization for SR data, gdscomp64, is skipped.
Updated Gerber ValidationThe split274x was updated.
The version fixes an issue in the boolean engine where the output was incomplete.
The built in error reporting system had a bug which was introduced on 29 January 2024 causing the program to crash. This has now been fixed.
Improve -circularize functionality.
The Boolean libraries used by GerberUnion have been updated to the most recent version.
Updated the Gerber validation module.
The Boolean libraries used by GerberUnion have been updated to the most recent version.
Updated the Gerber validation module.
The Boolean libraries used by GerberUnion have been updated to the most recent version.
Updated the Gerber validation module.
Updated to use latest boolean functions.
Updated to allow for polygon formats other than Leonov.
Sample code was updated to test ACS_Gbrunion_GetTile. If "-testtilefunc" is invoked, it will generate four output files formed from windows that split the entire set of polygons into four quadrants of data.
The test output is as follows:
FILE NAME DESCRIPTION [output_base_name]_q1.[gbr|txt] Upper Right Quadrant [output_base_name]_q2.[gbr|txt] Upper Left Quadrant [output_base_name]_q3.[gbr|txt] Lower Left Quadrant [output_base_name]_q4.[gbr|txt] Lower Right Quadrant
There were arguments added by the library that should not have followed the "-engargs" argument when they should have preceded it. This has now been fixed.
Update to -sizingvalue command lineThe -sizingvalue command line argument can now be used in the following ways:
-sizingvalue:[value in x and y direction] or -sizingvalue:[value in x direction],[value in y direction]Note that unit specifiers are supported.
The Boolean libraries have been updated to the most recent version.
Updated the Gerber validation module.
Reduced sleep time of the wrunbat module between program launches.
The Boolean libraries have been updated to the most recent version. Specifically, the speed of the boolean engine was improved when sizing is used.
The Boolean libraries used in this DLL have been updated to the current version.
Fixed a problem when a file name or folder name had a comma. This problem manifested itself as a problem because comma is used as a delimiter in the job file (a dynamically created resource file) for the actual import of the Gerber data into various modules. If the path or base name contained one or more commas this would/could cause some confusion when reading the job file.
New boolean engine with improved speed.
Bug Fix:Assuming Polygon Input is LEONOV when "skip_gdscompact" is invoked. If gdscompact is skipped, the input data comes from gbr2gdxb engine which does not produce LEONOV polygons. This incorrect assumption has now been fixed.
For Input Files with > 1000 Layers, Skip GDSCompactThe GDSCompact routine is skipped over when total Gerber layer count exceeds 1000. Why? Performance Issues?
Job File Reading Speed Improved
The job file read module was significantly sped up for files with large layer counts
Updated Boolean LibrariesThe Boolean engine library used by GBRUnion has been updated to the most recent version.
Updated Gerber Validation ModuleThe module that validates the input Gerber file has been updated.
Gerber Interpreter UpdatedThe Gerber interpreter module has been updated to handle input files with very large layer counts. Prior to this update, input files wit >48,000 layers caused problems.
Updated the 32 bit release of GerberUnion library to be in sync with the 64 bit version.
Passing arguments to the managerBoth "gbrunmgr.exe" and "gbrunmgr64.exe" can be passed a set of arguments directly by using the following:
-bgn_mgr_args [manager_args] -end_mgr_argsThe sample programs, "gbrunion_dynamic.exe" and "gbrunion_dynamic64.exe" have been adapted to use these arguments.
The 'x' multiplication operator was being supported but not the 'X'. This has now been fixed.
Scaling large files over 2GBScaling would fail and report error when some of the intermediate files were over 2GB. This has now been fixed.
Boolean components were updated.
Gerber validation components were updated.
Merging stage (gdsfilt64.exe) input/output synchronization was fixed on Windows.
Boolean components were updated.
Alter boolean flow for Manhattan sizing -manh and -dirtydata.
Fix for memory corruption when -dirtydata or -manh with non zero sizing was used. When these arguments are encountered, the boolean step is altered. This means that the intended boolean engine command line is processed and altered to become two command lines. The memory corruption occurred when an argument greater than 260 characters was encountered. This can happen when there are a large enough set of Gerber mass parameters, Layer Polarity Dark/Clear switches (i.e. %LPD*% and %LPC*).
Added "-dirtydata" argument and alter boolean flow for Manhattan sizing. If -dirtydata is present in gbrunmgr command line or manhattan
sizing is found, the following will occur :
(a) Data will be unionized separately in each layer.
(b) It will be sized by 10 percent of target size.
(c) Data will then be unionized sequentially.
(d) It will be sized by target size minus 10 percent of target size.
New boolean flow for Manhattan sizing.
Fix -macro_tol command line parsing.
Update Gerber validation component and boolean components.
New "Mesh Adjust" command line option - This will slightly grow apertures to handle mesh hatches with edges that barely touch. Validation must be set in "Preferences" for this to work.
Gerber union manager fix to -macro_tol argument parsing.
Updated Gerber validation and boolean components.
This version fixes a problem parsing of -bgn_split_args.
This version fixes a problem with the stage progress operation count. When scaling was invoked, this count was off. This problem was introduced in the command line parsing of (v1.87 01/16/2020 rcs 1.134).
This version fixes a problem with -progstatcb:DLL_FIL_NAME.
Check and report problem during Gerber validation caused the problem of default progress dialog appearing rather than
callback dialog. Order of argument parsed needed to be changed. This has now been fixed.
This version fixes a problem with the Gerber Union interpreter when two point trace draws done on the same point and failing to draw correctly.
Errors and warnings for processes are more informative.
Invoke logging for gerber layer and aperture import.
Call GDSFILT only when there are multiple input gerber files.
Automatically stops execution when error is detected - If any program launched by Gerber Union returns an error code, Gerber
Union will terminate itself.
This version is the same as 1.12a with the exception that 32 bit .LIB and .DLL were added for running the 32 bit gbrunion sample program (also added).
In addition, VS2008 source example folders were added as well as batch files to the examples folder.
This version fixes an overlapping issue that occurred when exceeding max points or with manual partitioning.
Enhancements have been added to boolean engine with respect to validation.
Unionization has been improved to be nearly thread independent
Added -gbr command line option to export Gerber from Gbrunion DLL64. This new option is also available in the sample code and the batch file in the examples folder.
Software UpdatesAdded support for embedding level. The sample code includes -emblevel as an example.
In this version Cutline polygon format is the default.
In this version Silent mode is the default.
Remove 32 bit support.
Gbrunion DLL64 is now installed in a new folder (not in the 32 bit folder).
Gbrunion DLL64 has its own product number.
Sizing values are taken into account when considering chord error to be used for, segmenting, arc recovery, and circularization. This is designed to preserve sized shapes and to optimally circularize them.
"split274x64.dll" -bgn_split_args [eng_args_1] -end_split_args
"gdscomp64.exe" -bgn_gdscomp_args [eng_args_2] -end_gdscomp_args
"boolw64.exe" -engargs [eng_args_3]
Notes:
[eng_args_x] refers to the set of arguments corresponding to a particular program.
-engargs should always precede the last set of arguments on the commandline that are intended for boolw64.exe
Arc recovery takes place before durung unionization. It is designed to remove jagged edges found in segmented sized curves soa as to permit circularization.
Ported all EXE and DLL to 64 Bit VS2015Only the interface DLL is 32 / 64 bit. The sample program can be 32 / 64 bit
and VS2008 / VS2015.
Note: You will need to include the following redistributable packages:
Microsoft Visual C++ 2015 Redistributable Package (x64)
Microsoft Visual C++ 2015 Redistributable Package (x86)
Circular data of donut shape is drawn in two parts. One half was being drawn with the expected precision while the other was not. This has now been fixed.
Software UpdatesUpdated the boolean components in the release.
Updated the gerber conditioning module.
Gerber Union Manager now loads usage(64).dll dynamically.
DXF layer base name was not being passed out. This has now been fixed.
Mass Parameter FixSplit274x components were fixed to handle a problem with a file that included consecutive empty mass parameters.
Not all data that should have been converted to circular was converted. This has now been fixed.
When Gbrunion started using gbrunmgr.exe" instead of the integrated viewer model, "gbrvu.exe", the viewer failed to pass on the arcres and arcsag arguments to "gbrunmgr.exe". This has now been fixed..
Multiple consecutive SR Mass Parameter FixMultiple consecutive SR Mass Parameter are now handled properly and only the last SR parameter is taken into account.
New circularization outputNew -circularize command line option can take a collection of vertices and produce an arc or even circle in the output file. Default is off
Recompiled DLL for flexl tolerant capability - This allows validation to be retried for communication problem events.
Adapted to use "split274x.dll"This allows updates to be done to the Gerber preprocessor without having
to recompile executables dependent on its code.The current
"split274x.dll" reflects the following:
(a) More implied intelligence is applied with respect to G75 codes.
(b) Bug fix for multiply defined dcodes higher than 40000.
Added -macro_tol:val[unit] to help identify similar RS274X AM MACROS.
The tolerance value is used in the Gerber preconditioner, split274x,
to map similar aperture macros into one. The default has always used
0.001 MM or 0.0004 Inches. This control is now provided to allow the
user to specify the tolerance. The default is 0.001 MM or 0.00004 IN.
The value must be no negative and no greater than 10 UM.
Replaced "-no_part" argument with -single_part argument in GBRUNION.
The "-single_part" argument is made to run with one single partition
window. This is functionally the same as enforcing that a single thread
is applied to compacting and boolean operations. The absence of
partition arguments, provided by "-no_part", used to do it, but
multi threading, specified by the argument "-thrnum:number" or
automatically detected, caused partitioning to happen anyway.
Updated Flexlm to version 11.13.1.2.
GDSII output in GerberUnion is safe guarded against circularize option.
-no_joinpart command line argument was removed.
Fixed a problem where arc traces with radii greater than width were segmented incorrectly.
When a butterfly figure interacts with something else it created a self touching polygon which was problematic for subsequent boolean operations.
After union, some polygons with touching holes had very acute angles touching butting lines mistakenly, causing gaps in the data. This has been fixed.
The text file passed to gbrunmgr's (-polywin:file command line option)" now accepts comma and tab characters in addition to space characters as delimiters for xy coordinates.
Certain cases of smoothing and the amount of partitioning resulted in cracks appearing in the polygons generated by GerberUnion. This was because the partition edges were not being excluded from the smoothing.
Unit values on the command line carrying an exponent in their expression (for example 1.0e-005) were not handled properly. This has now been fixed.
Allow unit specification where unit can be INCH, MIL, CM, MM, or UM. This has been added for the following arguments: -arcsag:val[unit] -diameter:dia.[unit] -diameter_lpc:dia.[unit] -offset:x[unit],y[unit] -xform:xform_parms Set transformation settings (comma separated). xform_parms is rotation_parms,mirror_parms,scale_parms,offset_parms rotation_parms are anchor_x[unit],anchor_y[unit],rotation mirror_parms are mirror_x,mirror_y scale_parms are scale_x,scale_y offset_parms are offset_x[unit],offset_y[unit] -overlapvalue:value[unit] -circularize[:chord_err[unit]] -reversal:marginx[unit],marginy[unit] -sizingvalue:value[unit] -smoothingvalue:value[unit] -smoothingvalue:value[unit] -window:xmin[unit],ymin[unit],xmax[unit],ymax[unit]
Added support of -joinpart argument into library. This turns on data partition joining
-overlapvalue optionAdded support of -overlapvalue:value argument into library. This Generates an overlap of value in butting mode. (use it with -polyformat:butting)
Software Updates Added a usage dialog box into sample program, found in the bin sub folder, showing all available arguments that can be passed into library.
Fixed usage box to display correct executable name.
(5) The DLL manual has been updated to show the same information as the usage box displayed from the sample program.
This is now applied all the time instead of conditionally as indicated below:
Optimization has been applied for handling polygons with large vertex counts.
Robustness has been improved by adding internal checks between steps.
Missing contours were discovered and fixed.
Horizontal separationHorizontal separation of boundary removed.
Data was being dropped when sizing was used on a customer Gerber file. This has now been fixed.
Convex partitioning for each polygon required using double comparison rather than rounded integer comparisons.
Gerber Union circularization speed was improved by applying multithreading, and optimizing self touching check.
Program crash
Circularize functionality improved. Unspecified circularize chord error uses 5 um equivalent by default.
Usage is
-circularize
or
-circularize:value
Where value is a user specified value in file units (MM or INCH).
New Licensing
Adopted new Flexlm license model, and no more support for disk serial number.
Program crash
Various components have been updated including the one concerning Gerber interpretation which caused a software crash.
Support new ACS Softkey Licensing
All customers wishing to use ACS Softkey Licensing will require a
uniform supplemental soft key kit, a customer vendor key file, and
two static vendor files.
Note to OEM: You should carry out the following instructions to properly compile and use the soft key license test program and the Gbrunion Dll test program. (a) You will receive an email with a link to download soft key kit. Install soft key kit after this installation. (b) This same email will contain a zip file. File Name Description Instructions --------- ----------- ------------ vkf.txt Vendor Key File Place in [Installation_Directory] (Expires 04/15/2018)or wherever else desired, [VKF_Directory]. acsvendor_s.lib 32 bit Softkey LibPlace in [Installation_Directory]\lib acsvendor64_s.lib 64 bit Softkey LibPlace in [Installation_Directory]\lib Follow instructions above for placement of three files mentioned above. (c) Open solution file in [Installation_Directory]/softkey_sample_vs2008 using Microsoft Visual Studio 2008 and compile win32 and x64 target programs. (d) Run softkeyshell.exe or softkeyshell64.exe in a similar manner as indicated below. [Installation_Directory]\bin\softkeyshell.exe "[Installation_Directory]\artwork\gbrunmgr.exe" [Program_Arguments] "-acsp:[VKF_Directory]\vkf.txt" Note that there is a solution file that creates a test program for Gbrunion DLL and the followingset of instructions, (e) and (f), correspond to this. (e) Open solution file, gbrunion_dynamic_oem.sln, in [Installation_Directory]/gbrunion_dll_sample_vs2008 using Microsoft Visual Studio 2008 and compile win32 and x64 target programs: gbrunion_dynamic_oem.exe gbrunion_dynamic64_oem.exe. (f) Run run_dynamic_oem.bat or run_dynamic64_oem.bat to execute above Gbrunion DLL test programs (g) Read [Installation_Directory]\documentation\oem_readme.txt for more detailed instructions.
Gerber Union Updates
Allow any OEM licensed product...
This version allows any OEM licensed product to do the following:
Support Files
Batch files, benchmark files, and sample code has been changed to show one window run and one data extents window run. Tiling has been removed from sample code.
64 bit Gbrunion DLL (gbrunion64.dll) has been added
64 bit Windows OS is checked for, and if found, 64 bit executables are used to execute the following:
New Installation
Install Shield 2014 is used.
New Directory Structure
Add Extents information to ACS_GBRUNION_FileInfo Data Structure
By calling ACS_Gbrunion_GetFileInfo, a user can extract the
data extents of the input Gerber file in the units of that same file.
The new data structure field is shown below.
typedef struct { char libname[_MAX_PATH]; - internal name generated from opening input Gerber file char unit[32]; - units of input Gerber file int igrid; - integer grid of input Gerber file double dataexts[4]; - extents of loaded data <------ >>>>> New data field <<<<<< } ACS_GBRUNION_FileInfo;
Add ACS_Gbrunion_GetTile Function
ACS_Gbrunion_GetTile Syntax int ACS_Gbrunion_GetTile ACS_Gbrunion_GetTile(double *window, ACS_GBRUNION_Polygon **ppolylist, int *ppolycnt); Description Generates a list of unionized polygons clipped to a specified window and returns a list of polygons. May only be called after ACS_Gbrunion_Open. Arguments double *window - clipping window extents in units of input Gerber data. (minx, miny, maxx, maxy) ACS_GBRUNION_Polygon **ppolylist - returned list of polygons which may or may not contain holes. int *ppolycnt - returned polygon count Return 0 : success nonzero : failure
Allow for Dynamic linking in addition to static linking
Static linking requires:
Initial Release
This is the initial release of the DLL.