| QISLIB Revision HistoryThis page contains notes on the release history and revisions made to QISLIB. 
 QISLIB v2.95 Windows 64 (VS 2015) 09/5/2019Fix 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/2016Builds 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/2015Fix 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/2015More 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/2015New 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/2014New 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/2014TiffExtract
 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/2013New 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/2013Corrected 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/2013QisBool 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 Bug Fix in Isotropic SizingQisBoolOptions_SetPartUnionto ON, an improved algorithm will allocate data to the available threads resulting in improved throughput. 
 Right angled corners for very small (less than 10 DBU) sizing values caused a crash in QisBool_UnionMTFor 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/2012Update 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/2012More Instances AvailableThe QISBOOL simultaneous instance limit has been raised from 64 to 256. 
 
 
 QISLIB v2.81 4/23/2012New Function to Ignore Text Entities on Loading
 A new function, QisLib_SetIgnoreTextsdetermines 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/2012New 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/2011Windows 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/2010Linux 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/2010Update 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/2010QISLIB Windows64 supports VS2008
 The latest QISLIB release on Windows64 is compatible with VS2005 and VS2008.
 
 
 
 QISLIB v2.72 4/7/2010Major Release
 This is the most significant release since v2.61.Performance Enhancement 
 Faster QisLib_GetStructureReferencesfor 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, Granular Control of Reference MarkersQisLib_SetIgnoreStructureList, which should be called prior to eitherQisLib_OpenOASISorQisLib_OpenGDSIIinstructs the library to ignore specific cells by their name or by use of regular expressions. 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_DeleteVectororQisLib_UndeleteVectorare called and the layout file has not been opened withQisLib_SetLoadMemoryturned 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/2010Bug 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/2010Major Memory Usage Optimization
 See info in v2.72Initialization 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.Memory leakContact us for details.
 
  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.Linking errors on windowsThe 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.
 
 
  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.New Function - QisLib_OpenMemoryMaps
 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.
 
  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.New Function - QisLib_SetExceptionHandlerCallback
 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 callback mechanism to report asynchronous security errors and allow
the user to handle them appropriately.New Function Parameter - QisLib_InitLib 
  Unix/Linux only.New Function Parameter - QisLib_Redraw, QisLib_ZoomHome
 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.
 
  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.Various Functions Behavior While Opening A File
 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.
 
  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.New Detail QisLib_InitLib Return CodesPass 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.
 
  
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.New Version Information Function - QFract_GetVersionThis 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.
 
  
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.
 
 |