In order to illustrate QISMlib's multi-threaded exploder, and to provide an optimized solution to customers, we built a sample application that uses QISMlib along with two other libraries - Our QisMBool and our ACSRasterLib (both of which are multi-threaded.) Clip Extract has been designed to extract or "clip out" a large number of relatively small windows (say from 10 x 10 um up to 500 x 500 um) from a very large GDSII file.
Let's look at the case where we want GDSII clips written to disk.
1. The Clip Extract Executable reads a list of windows (in this case from a file)
2. Windows are queued up and sent to one of the QisMLib threaded exploders.
3. The exploder thread traverses the hierarchy extracting any boundaries or paths that cross the window.
4. Geometries are accumulated in a polygon buffer. Paths are converted to polygons.
5. QISMBool reads from the polygon buffer and clips/heals the polygons where they cross the window edge.
6. Results are stored in another buffer labeled V in the diagram. The input and output buffers share identical formats. QisMBool itself is multithreaded.
7. If the Clip Extract application has been instructed to output GDSII, then the Clip Extract Library will format and write the contents of the V buffer to disk.
8. If the user prefers to read the clipped vectors directly from buffer V, the callback function makes the pointer to the buffer available. (This cannot be done with the executable -- if you want to pull data directly out of memory then you'll need to use the library)
The diagram above does not include the loading of the GDSII data.
Clipextract uses the qismlib.so library along with the QisMBool library. These two libraries handle the extraction of polygons and the clipping/unionization of polygons respectively. The diagram below shows the various library functions and API groups involved.
For a short summary of the programmatic flow see this page.
Using ClipExtract to perform logical layer operations (AND, OR, XOR, MINUS) on two or more layers prior to extracting a clip.Details