QIS Library Logo

QISLIB Revision History

This page contains notes on the release history and revisions made to QISLIB.

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


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


+ 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.


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


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.


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.


_QIS_ON    load text data
_QIS_OFF   do not load text data


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.


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 SizeOld Memory FootprintNew Memory Footprint
42 GDS207.3
32 GDS93.6
15 GDS7.42.7
2.5 OASIS4.83.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.

417 Ingalls St. Unit C, Santa Cruz, CA 95060 831.426.6163 email:  info@artwork.com