QISLIB Revision History
This page contains notes on the release history and revisions made to QISLIB.
QISLIB v2.95 Windows 64 (VS 2015) 09/5/2019
Fix for Quad Tree
There was a bug in the quad-tree code that caused window queries to fail because of an integer overflow during the quad tree construction for designs with very large extents. The issue was fixed.
QISLIB v2.94.1 Linux64 08/17/2016
Builds Updated on Linux
Core components built on RHEL5 (some older still on RHEL4) Tested on RHEL5, 6 and 7.
QISLIB v2.94.1 Windows 64 08/10/2015
Fix error 6 while opening large files
This version of QisLib fixes a bug that caused an error (code -6) while opening extremely large GDSII files.
QISLIB v2.91h Windows 64 02/06/2015
More C# Sample Code
At the request of customers using C#, added C# sample code to illustrate the use of QSTOR and Get_Vector call back functions.
QISLIB v2.91f Windows 64 01/30/2015
New C# Sample Code
At the request of customers using C#, added a sample calling application written in C# to illustrate how C# can be used to call QISLIB (which has a C/C++ based API) Applies to Windows version only.
QISLIB v2.91a Windows 64 08/23/2014
New Windows Installer
New Windows installer which addresses frequent delay issues during installation caused by interaction with other open programs.
QISLIB v2.91 Windows 64 08/20/2014
TiffExtract
Updated the TiffExtract GUI and source code example to add support for both GDSII and OASIS and to improve reports of file statistics.
QISLIB v2.852 Windows 64 and Linux 09/10/2013
New Option: QisBoolOptions_SetPartUnion
The newly added setting: QisBoolOptions_SetPartUnion can be used to control:
a) If convexing is multi-threaded or not
b) If the thread partition lines are visible in the output data or not
This allows the client program to choose better performance at the cost of possibility of thin rectangles or cleaner output polygons at the cost of performance overhead.
Note: this only applies when the QISBool license is enabled.
QISLIB v2.851 W64 and Linux 09/9/2013
Corrected a memory footprint bug
Fix for an increase in memory footprint which occurs after multiple runs of the functions UnionMT and BinaryMT.
New API Function: QisBoolOptions_SetPartDirectionControl
the client can now the direction of striping (butting edges) for functions: QisBool_UnionMT, QisBool_BinaryMT
Prototype
+ void QisBoolOptions_SetPartDirectionControl(const double XToYRatio, void* BooleanHandle);
Input Parameters
XToYRatio Ratio of Width of the input data set to the Height to
be used as a threshold. As long as actual ratio for a
specified input data set is less than this value;
the input data set will be partitioned into a set of
horizontal stripes stacked vertically. If the actual
ratio is greater than the threshold, the data set will
be partitioned into vertical stripes stacked horizontally.
BooleanHandle QisBool instance handle.
Usage
To control the direction of Butting edges during Boolean Operations
Set Leonov Output Mode to eLEONOV_OUT_BUTTING (QisBoolOptions_SetLeonovOutput)
Use XToYRatio = 1000.0 for forced horizontal striping.
Use XToYRatio = 0.001 for forced vertical striping.
Default value is 1.5
Details
Use before QisBool_UnionMT and QisBool_BinaryMT only.
QisBoolOptions_Reset will reset this setting to the default value of 1.5
When used alongside QisBoolOptions_SetLeonovOutput(eLEONOV_OUT_BUTTING, Handle) and Convexing (in-X or Full) the butting edges are going to be horizontal or vertical depending on the value of the ratio.
Warnings
If the data set contains very long and narrow polygons in the same direction as the stripes, this could result in thinly-sliced (along the direction of the stripes) polygons.
QISLIB v2.85 Windows 64 08/28/2013
QisBool Changes
A number of fixes and ehancements to the Boolean have been made.
Bug Fix
a call to QisBoolOptions_Reset caused QisBool_UnionMT to run single-threaded. Fixed.
Enhancement in Boolean
QisBoolOptions_SetConvexOutput + QisBool_UnionMT is now multi-threaded
Enhancement in Boolean Throughput
Unless the user intentionally sets QisBoolOptions_SetPartUnion to ON, an improved algorithm will allocate data to the available threads resulting in improved throughput.
Bug Fix in Isotropic Sizing
Right angled corners for very small (less than 10 DBU) sizing values caused a crash in QisBool_UnionMT
For a scenario like (4) QisBoolOptions_SetRoundCorners MUST be called before QisBoolOptions_SetSizing and QisBoolOptions_SetSizingMode
QISLIB Changes
These changes affect the QISLIB library functions (not the QISBool library functions)
Bug Fix: Dropped Data
Very tiny geometries missing or dropped when the co-ordinates in DBU are close to sizeof(int)/ 2. This has been fixed.
Enhancement in Built-In Rasterizer
For 64bit QISLIB, the built in rasterizer (QisLib_GetHiresImage) is now capable of generating bitmaps larger than 2GB
QISLIB v2.821 11/12/2012
Update Linux Binaries
The binaries in this package were built with the following Linux environment:
GCC 4.4.5
GNU glibc 2.12
Linux Kernel 2.6.32-131.6.1.el6.x86_64
All the binaries in this package (including the utility and licensing programs) have been built as 64bit. We are no longer releasing 32 bit versions of QISLIB/QISBOOL.
QISLIB v2.82 10/22/2012
More Instances Available
The QISBOOL simultaneous instance limit has been raised from 64 to 256.
QISLIB v2.81 4/23/2012
New Function to Ignore Text Entities on Loading
A new function, QisLib_SetIgnoreTexts determines whether text entity data is loaded into the QisLib database on file open (GDSII, OASIS). For layout files with lots of text where the user does not need to use text this will reduce memory footprint and load times.
Parameters
_QIS_ON load text data
_QIS_OFF do not load text data
Note
Must be called prior to QisLib_OpenGDSII or QisLib_OpenOASIS
Cell Extents Computation
Improved cell extents calculation for cells with paths along the cell's bounding box. The new extents calculation is more precise and takes into account the path width and path end cap.The extents would not be exact only in cases where a path vertex bends no-orthogonally and the vertex lies at the extents of the cell.
File name with space(s)
QisLib_OpenOASIS now works correctly for file names (or paths) containing spaces. Previously, it returned an error code (-4).
QISBOOL Convex Function
QisBool_UnionMT and QisBool_BinaryMT now support the QisBoolOptions_SetConvexOutput.
QISLIB v2.783 1/4/2012
New Function QFract_SetFracture
Added a new function to the QFract API that allows the caller to control whether
to fracture polygons or simply unionize them without fracturing.
Syntax
void QFract_SetFracture(const int onOff);
onOff 0 polygons are unionized but NOT fractured.
onOff 1 polygons are fractured.
QISLIB v2.761 2/24/2011
Windows Imcompatibility 64bit
This version of the library resolves an incompatibility between Win64 STL Iterators and Win32 which was responsible for a crash.
QISLIB v2.751 12/06/2010
Linux Binary Update
The QisLib and Qfract 64 bit binaries have been compiled with GCC 3.4.6 on a workstation running RH 3.4.3-9.EL4 Kernel 2.6.9-5.ELsmp and work as expected in the environment.
QISLIB v2.75 11/29/2010
Update Linux Binaries to include QFRACT
The latest QISLIB release for all Linux versions with QFRACT (trapezoid fracturing) support.
The 'runtimefiles' directory contains the qis and qfract libraries, while the 'includefiles' directory contains the qislib and qfract header files.
QISLIB v2.72 5/21/2010
QISLIB Windows64 supports VS2008
The latest QISLIB release on Windows64 is compatible with VS2005 and VS2008.
QISLIB v2.72 4/7/2010
Major Release
This is the most significant release since v2.61.
Performance Enhancement
Faster QisLib_GetStructureReferences for both GDSII and OASIS.
Earlier versions searched for structure references in the current window and disregarded the display filter settings. This meant that when showing the home view even references to cells too small to view were processed -- greatly slowing the search down.
QISLIB now takes into account display filter settings; much faster when the window is for a full view. GDSII and OASIS performance is equal.
Compression Support
Opens GDSII files that are zipped or gzipped. (Does this actually do this directly or does it create a temporary uncompressed file on disk? Programmer's notes are not clear.)
Ignore User Specified Cells on Open/Load
A new function, QisLib_SetIgnoreStructureList , which should be called prior to either QisLib_OpenOASIS or QisLib_OpenGDSII instructs the library to ignore specific cells by their name or by use of regular expressions.
Granular Control of Reference Markers
Prior to this version, if reference markers (for display output) were turned on, then markers appeared both on each cell insertion point and on each text insertion point. Users requested that these be separately controllable.
Two new functions provide independent control.
QisLib_SetReferenceOnlyMarker(int onoff)
onoff 1 reference markers will be turned on for cell references only.
onoff 0 display of cell references depends on value of QisLib_SetReferenceMarker
QisLib_SetTextMarker(int onoff)
onoff 1 markers will be turned on for text only.
onoff 0 the setting depends on QisLib_SetReferenceMarker.
The preexisting function, QisLib_SetReferenceMarker , has been retained for backwards compatibility.
Use either this function, or both of the more granular functions.
Memory Usage Optimization
The memory footprint is now reduced to less than half of the previous versions. An average of 10% to 20% of the GDSII file size can be expected.
A new version of the load memory map, v1.03, is needed for this version. Older versions of load memory maps will not be used and will be recreated with a new version.
Sample Improvement
File Size | Old Memory Footprint | New Memory Footprint |
42 GDS | 20 | 7.3 |
32 GDS | 9 | 3.6 |
15 GDS | 7.4 | 2.7 |
2.5 OASIS | 4.8 | 3.1 |
Delete and UnDelete Vector Error Fixed
Previous versions would not return an error code of -3 as documented when QisLib_DeleteVector or QisLib_UndeleteVector are called and the layout file has not been opened with QisLib_SetLoadMemory turned on. This has been fixed.
To clarify, the user can only Delete and UnDelete vector data when the entire database has been loaded into memory - not when the entity database is left on disk. Prior to this version the user did not get the appropriate error message when attempting to delete/undelete while entity was on disk.
Bug Fix: OASIS Array References Missing Data
A bug in processing OASIS array references (number of rows and columns were reversed) resulted in dropped data. This has been fixed.
QISLIB v2.69 Linux 2/11/2010
Bug Fix: Drawing Crash
Fixed a bug causing the drawing to crash when the file is loaded into memory. Observed on RHE3 Linux 32.
QISLIB v2.68 Linux1/29/2010
Major Memory Usage Optimization
See info in v2.72
Initialization Note
When calling QisLib_InitLib , the first parameter must be the full path of the executable linking the QisLib.
Previously, the first argument was the path of the directory containing the executable linking the QisLib.
Old Function Call
int return = QisLib_InitLib(programDir, . . .);
New Function Call
int return = QisLib_InitLib(programPath, . . .);
If this change is not reflected in your QisLib client program's source code, you will get a license error (-3).
QISLIB v2.641 Windows 32bit VS6.0 and Windows 64bit VS 2005 (4/9/2009)
The new QIS Library version is v2.64.1.0 (Apr 03, 2009).
The corresponding BoolDll version is 2.153 (Apr 09, 2009).
The QIS Library API has not changed since the last release v2.61.1.0 except
for some new functions added to it in light of our work with OpenAccess, KLA Care
Area Wizard and the QckPlugin API. Therefore, existing QIS Library customers
should not have any issues using the new library.
The current QIS Library on Windows is now coherent with it's UNIX/Linux version
that it being employed in Qckvu3.
Open_OASIS bug on Windows64 has now been fixed. QIS Library can open oasis files without
any crashes.
The GDSII extraction bug has been fixed. Previously extracted GDSII files contained
multiple copies of each polygon.
QISLIB v2.61 Windows XP64 (2/14/2008)
Windows XP 64 bit support
QISLIB for XP64 bit is now available. This version will handle multiGB files, something the 32 bit version is not able to do.
QISLIB v2.61 (10/12/2007)
Faster OpenGDSII
Faster OpenGDSII for small GDSII file without any penalty for larger GDSII files.
New Product number
The new QisLib product number has changed and hence none of these will work with the old licenses.
New licenses will have to be shipped with these packages.
Single Threaded
This package is single threaded. Special wrappers are needed for multi threading operation.
Contact us for details.
Memory leak
Small memory leak caused the program to crash after thousands of open GDSII file. This has been fixed.
QISLIB v2.602 (07/24/2007)
New PDF manual
This package includes a complete and easy-to-use PDF Documentation.
Demo Programs
This package includes four demo programs that the user can build on their own machine. These demo programs
illustrate some of the basic and most important functionalities of the QIS Library.
The demo programs can be used to see how QIS Library works and their source code can be used as a reference for using the QIS Library.
Linking errors on windows
This package fixes the issues that our Windows customers reported.
QISLIB v2.60 (06/14/2007)
New Function - QisLib_SetProcessEvents
While QIS is busy doing something (e.g. opening a file, drawing, getting
vectors, saving to a file, etc.), QIS would process any events for the
program so the program will be responsive to user input. e.g. User
clicking stop during a redraw.
If the program does not want QIS to process events during a busy process,
use this function to turn it off.
Default for Windows is on, default for Unix/Linux is on if a XtAppContext
is passed to QIS via the InitLib function, it is off if XtAppContext
is NULL.
For Unix/Linux, if XtAppContext is NULL, SetProcessEvents cannot be
turned on, the function would return -1. Otherwise, the state is set
and the function returns 0 for success.
New Function - QisLib_OpenMemoryMaps
To open GDSII scan and dbload memory maps directly without the original
GDSII file.
New Function - QisLib_SetDrawWindowID
Use this function to give QIS the program's drawing area and QIS would
draw directly to this drawing area when the Redraw or ZoomHome function
is called.
Pass in a HWND (Windows) or Pixmap/Drawable (Unix/Linux).
This can be turned on or off via the onoff parameter.
This mode can be toggled on and off during a program's run except during
a QIS redraw. Check the return code to see if the mode has been changed
or not.
If this direct draw is turned on, QIS would finish the drawing (on the
program's drawing area) but it would not return an image size
and image buffer when the Redraw or ZoomHome function returns,
regardless of what the Set_Image_Format is. The function GetImage would
do nothing, it just returns -3 without returning the window, image size,
and image buffer.
If this direct draw is turned on, the drawing area can be set to not
cleared before drawing starts. QIS draws on top of whatever
is in the drawing area prior to a Redraw command. This behavior has
an effect of overlaying QIS data on top of an existing picture.
The functions Redraw and ZoomHome can be controlled to clear or not
clear.
Home view is not remembered/cached under this mode so the command
Zoom_Home would not be almost instant. Home view is now also a redraw.
New Function - QisLib_SetExceptionHandlerCallback
New callback mechanism to report asynchronous security errors and allow
the user to handle them appropriately.
New Function Parameter - QisLib_InitLib
Unix/Linux only.
The InitLib function now takes an XtAppContext (const void *) parameter.
This is the application context of the program. While QIS is busy
doing something (e.g. opening a file, drawing, getting vectors, saving
to a file, etc.), QIS would process any events for this application
context so the program will be responsive to user input. e.g. User
clicking stop during a redraw.
If a program doesn't have an application context, for example a simple
command line program, then pass NULL as the parameter.
If a program has an application context but does not wish QIS to process
any events during a busy process, pass NULL as the parameter.
Also use the SetProcessEvents function to turn on/off processing events
during a busy process.
New Function Parameter - QisLib_Redraw, QisLib_ZoomHome
Redraw and ZoomHome have a ClearScreen parameter to control whether
QIS would clear the screen before redraw or not. This parameter is
only used if SetDrawWindowID is on.
If ClearScreen is off, QIS drawing would be overlayed on top of the
existing drawing in the program's drawing area.
If ClearScreen is on, QIS would first clear the program's drawing area,
then a new drawing would be drawn.
Various Functions Behavior While Opening A File
The behavior of various functions including OpenGDSII, OpenOASIS and
OpenMemoryMaps has been changed while a file open is already in progress.
Calling these functions while a file open is in progress would do nothing,
an error code would be returned to indicate this situation.
Invalid pImageSize Returned for Redraw and ZoomHome
Previous versions of QIS would return a wrong pImageSize when the
Redraw or ZoomHome functions are called, thus the program might use
invalid bytes in the ImageBuffer and get a wrong image.
This has been fixed.
QISLIB v2.60beta1 (03/26/2007)
USB Key support
This version supports USB Key licensing.
Opening and Saving File Progress Function
Opening and Saving File Progress Function - QisLib_SetProgressMessageCallback.
Pass a callback function via this function and file opening and saving
percentage progress message string will be passed to the callback
function. Default is no progress message.
New Detail QisLib_InitLib Return Codes
0, no error
-3, license error
-4, colfill.pat is missing from the program's directory
-5, out of system resource, fill pattern bitmaps cannot be created (Windows only)
-6, gdsfont.shx is missing from the program's directory
To get a detail error message, call QisLib_GetErrorMsg
QFract v1.00 - Trapezoid fracture
First complete release of QFract. This version of QFract output polygons are all trapezoids.
QFract_Init Function Returns Different Codes and Error Messages
QFract_Init now returns 0 for success, -1 for internal database error,
-2 for licensing error. In the case of -2, QisLib_GetErrorMsg can
be called to get the detail error message for the licensing error.
QFract_GetFracture Function Returns Different Codes and Error Messages
0 no error
-1 license db error
-2 license error, QisLib_GetErrorMsg can be called to get the detail
error message for the licensing error
-3 data collection memory error
-4 data collection error
-5 error/warning, there are open, illegal or unfractured polygons
QFract_GetErrorCoords can be called to get the coordinates and
layer:datatype of the error vertices
New Fracturing Error Function - QFract_GetErrorCoords
While fracturing, when there are illegal polygons (e.g. self intersecting),
open polygons or polygons that cannot be fractured, in the specified
window area, previous version of QFract would stop the fracturing and
return an error with no detail information.
This version, the coordinates of the problematic vertex/vertices would
be remembered and fracturing will continue for the rest of the layers
and polygons in the window. The QFract_GetFracture function now returns
if there are fracturing error vertices and users can call a new
function, QFract_GetErrorCoords, after each call to QFract_GetFracture
to get a list of error vertices if QFract_GetFracture returns -5.
The error vertices are grouped on a per layer:datatype basis.
QFract_GetErrorCoords returns the number of layer:datatype, N, where
there are error vertices. If the number N is greater than 0, then it
returns a pointer to an array of N of type CQisLayerCoords*. Each element
in this array is a pointer to CQisLayerCoords which contains the layer
and datatype, the number of error vertices and the coordinates of each
vertex. Users can parse through this array and report the error vertices
if necessary. This array does not need to be freed by the user, QFract
will take care of the freeing.
The unit of the coordinates are in the unit set via QisLib_SetVectorUnit
before QFract_GetFracture is called which is default to _QISUNIT_UU (user
unit).
When there are error vertices, the fracturing might actually be good
because depending on the nature of the error polygon, say if it's a zero
area polygon, the fracturing output would be the same either way.
New Version Information Function - QFract_GetVersion
Added QFract_GetVersion to get a version and date string.
QFract version is separate from QIS version.
QISLIB v2.60Alpha2 (03/16/2007)
First Windows DLL version
This is the first release of the Windows QIS library software. Here are a few preliminary release notes:
This version has the QIS Library in a DLL format. The QFract "module" is inside the QIS DLL.
QFract is separately licensed.
User will need a license for QIS GDSII and OASIS.
This version supports SafeNet USB key.
QFract fractured output are not trapezoidal, they are just convex in X. Output could be a 5 point polygon.
QFract API functions return success or fail. Different failure return codes will be implemented.
There are just 3 simple API functions in the QFract module:
int QFract_Init();
void QFract_Close();
int QFract_GetFracture();
They are declared in the qfract.h file in the installation.
|