Run spatial queries on any view of a QisMFile database
QisMExploderQisMExploder C++ API (qismexploder.h)Data Structures (qismbase.h)QisMView (qismview.h)struct QisMExploderArrayclass QisMExploderSet_convert_paths_to_boundaries()Get_vector_paths()Set_vector_fully_inside()Get_vector_fully_inside()Set_array_mode()Get_array_mode()Get_vector_data()class QisMExploderV2Get_boundaries()Delete_store()Get_cell_references()Get_cell_tree()class QisMExploderV3Parent()QisMExploderV4Get_cell_ref_boundariesGet_cell_boundaries OptionsQisMExploder commandsexploder.set_viewexploder.get_boundariesexploder.get_cellref_boundariesfile.make_cellref_semiflatexploder.delete_storeexploder.write_texts_to_fileexploder.write_srefs_to_fileexploder.write_arefs_to_fileQisMExploder Licensing
Flags representing Array mode
struct QISMLIB_LNX_DECLSPEC QisMExploderArray{ enum Mode { NONE=0 /* No array elements processed */ ,OUTER=1 /* Only the outer row, column elements processed */ ,ALL=2 /* All array elements processed */ };};xxxxxxxxxxclass QisMExploder: public QisMView { ... };Represents the exploder object that performs spatial queries
Convert paths to boundaries during database traversal or retrive them as is
set : true => Convert paths to boundaries, false => Keep paths as-is
Paths with 0 width and paths with 1 vertex are returned as paths irrespective ofthis setting.
By default, paths are outputted as paths
This function will do nothing if a database traversal is in progress for the current exploder (if a new thread was created for that purpose)
xxxxxxxxxxvirtual void Set_convert_paths_to_boundaries(const bool set = true) = 0;Check if paths are converted to boundaries during database traversal
Return: true => Paths will be converted to boundaries, false => Paths will be retrieved as paths
xxxxxxxxxxvirtual bool Get_vector_paths() const = 0;Get only those vectors that completely lie inside the view window or get any vector that crosses the view window during database traversal
set : true => Get only vectors that lie fully inside, false => Get any vector crossing the view window
When turned on, only data (boundaries, paths, boxes) that is fully contained in the specified window are returned. Those which are partially crossing will be dropped
When set to off, data partially crossing the view window is also returned + Texts, Arefs and Srefs are not affected and will be returned irrespective of this setting if they cross the specified window
Default is off
This function will do nothing if a database traversal is in progress for the current exploder (if a new thread was created for that purpose)
xxxxxxxxxxvirtual void Set_vector_fully_inside(const bool set_ = true) = 0;Check if only fully contained vectors will be processed or any vector that crosses the view window (boundary, paths, boxes only)
Returns true : only data (boundaries, paths, boxes) that is fully contained in the specified window are returned
Returns false : any vector that partially crosses the view window is returned
xxxxxxxxxxvirtual bool Get_vector_fully_inside() const = 0;Control how elements of an array are processed during database traversal
mode : NONE (do not process any array elements), OUTER (only process outer row/column elements), ALL (process all array elements)
This function will do nothing if a database traversal is in progress for the current exploder (if a new thread was created for that purpose)
xxxxxxxxxxvirtual void Set_array_mode(const QisMExploderArray::Mode mode) = 0; Get the array mode currently set
xxxxxxxxxxvirtual QisMExploderArray::Mode Get_array_mode() const = 0; Traverse the QisMFile database with the current view settings to retrive various data entities (boundary, path, text, reference) in the view in form of vectors
target : A notification handler to process the QisMNotify::On_qismt_vector_data_begin, QisMNotify::On_qismt_vector, and QisMNotify::On_qismt_vector_data_end notifications
clientHandle : A client-specified opaque pointer that is available as-is during each data vector notification
createThread : If true, perform the database traversal in a new thread. Otherwise, execute the traversal in the calling thread
Success : true
Failure : false. Call Get_last_error_msg to get more information about the error
Refer to QisMNotify::On_qismt_vector for details about the various types of data vectors and return codes from the notification handler
The client is forbidden to change the current exploder view settings until this operation is complete (with the On_qismt_vector_data_end notification).
However, the client is permitted to work with other instances of the exploder while the current exploder is busy traversing the database
If a new thread is created for this purpose, the calling thread does NOT wait for the new thread to complete and is free to carry on with other operations including working with other exploders.
The calling thread will be notified of completion of the new thread via the QisMNotify::On_qismt_vector_data_end notification
The data vector handle and (and any associated pointers) available to each notification are valid only for the duration of that notification and should not be accessed outside the notification call
This operation can be interrupted at any time by returning a non-zero code from the notification callback
This function will fail if a database traversal is in progress for the current exploder (if a new thread was created for that purpose)
xxxxxxxxxxvirtual bool Get_vector_data( QisMNotify* target, void* clientHandle = 0, const bool createThread = false ) = 0;xxxxxxxxxxclass QisMExploderV2: public QisMExploder { ... };Traverse the QisMFile database with the current view settings and collect boundaries into a set
target : A notification handler to process the QisMNotify::On_qismt_vector_data_begin, and QisMNotify::On_qismt_vector_data_end notifications
clientHandle : A client-specified opaque pointer that is available as-is during each data vector notification
createThread: If true, perform the database traversal in a new thread. Otherwise, execute the traversal in the calling thread
Success : Returns non-NULL handle to a boundary set. Include qismbstore.h for the API to work with this set
Failure : Returns NULL. Call Get_last_error_msg to get more information about the error
This method will cause QisMExploder::Set_convert_paths_to_boundaries(..) to be set to true.
The client is forbidden to change the current exploder view settings until this operation is complete (with the On_qismt_vector_data_end notification).
However, the client is permitted to work with other instances of the exploder while the current exploder is busy traversing the database
If a new thread is created for this purpose, the calling thread does NOT wait for the new thread to complete and is free to carry on with other operations including working with other exploders.
The calling thread will be notified of completion of the new thread via the QisMNotify::On_qismt_vector_data_end notification
This function will fail if a database traversal is in progress for the current exploder (if a new thread was created for that purpose)
xxxxxxxxxxvirtual QisMBStore* Get_boundaries( QisMNotify* target, void* clientHandle = 0, const bool createThread = false ) = 0;Destroy the set of boundaries collected by QisMExploderV2::Get_boundaries(..)
xxxxxxxxxxvirtual void Delete_store(QisMBStore* handle) = 0;Get references to a cell within the current view
cellName: Name of the cell to search for
target : A notification handler to process the QisMNotify::On_qismt_vector_data_begin, QisMNotify::On_qismt_vector, and QisMNotify::On_qismt_vector_data_end notifications
nestingLevel : Search will be limited to the specified nesting level
firstRef : If true, only the first reference to this cell will be returned. Otherwise, all references will be returned
clientHandle : A client-specified opaque pointer that is available as-is during each data vector notification
createThread : If true, perform the database traversal in a new thread. Otherwise, execute the traversal in the calling thread
Success : Returns true
Failure : Returns false. Call Get_last_error_msg to get more information about the error
Only QisMVector::SREF and QisMVector::AREF vector types will be returned
Refer to QisMNotify::On_qismt_vector for details about the types of data vectors and return codes from the notification handler
The client is forbidden to change the current exploder view settings until this operation is complete (with the On_qismt_vector_data_end notification).
However, the client is permitted to work with other instances of the exploder while the current exploder is busy traversing the database
If a new thread is created for this purpose, the calling thread does NOT wait for the new thread to complete and is free to carry on with other operations including working with other exploders.
The calling thread will be notified of completion of the new thread via the QisMNotify::On_qismt_vector_data_end notification
The data vector handle and (and any associated pointers) available to each notification are valid only for the duration of that notification and should not be accessed outside the notification call
This operation can be interrupted at any time by returning a non-zero code from the notification callback
This function will fail if a database traversal is in progress for the current exploder (if a new thread was created for that purpose)
xxxxxxxxxxvirtual bool Get_cell_references( const char* cellName, QisMNotify* target, const int nestingLevel = QisMNesting::ALL, const bool firstRef = false, void* clientHandle = 0, const bool createThread = false ) = 0;Get cell references within the specified cell
cellName: Name of the cell to search for
target : A notification handler to process the QisMNotify::On_qismt_vector_data_begin, QisMNotify::On_qismt_vector, and QisMNotify::On_qismt_vector_data_end notifications
nestingLevel : Search will be limited to the specified nesting level
clientHandle : A client-specified opaque pointer that is available as-is during each data vector notification
createThread : If true, perform the database traversal in a new thread. Otherwise, execute the traversal in the calling thread
Success : Returns true
Failure : Returns false. Call Get_last_error_msg to get more information about the error
Only QisMVector::SREF and QisMVector::AREF vector types will be returned
Refer to QisMNotify::On_qismt_vector for details about the types of data vectors and return codes from the notification handler
The client is forbidden to change the current exploder view settings until this operation is complete (with the On_qismt_vector_data_end notification).
However, the client is permitted to work with other instances of the exploder while the current exploder is busy traversing the database
If a new thread is created for this purpose, the calling thread does NOT wait for the new thread to complete and is free to carry on with other operations including working with other exploders.
The calling thread will be notified of completion of the new thread via the QisMNotify::On_qismt_vector_data_end notification
The data vector handle and (and any associated pointers) available to each notification are valid only for the duration of that notification and should not be accessed outside the notification call
This operation can be interrupted at any time by returning a non-zero code from the notification callback
This function will fail if a database traversal is in progress for the current exploder (if a new thread was created for that purpose)
xxxxxxxxxxvirtual bool Get_cell_tree( const char* cellName, QisMNotify* target, const int nestingLevel = QisMNesting::ALL, void* clientHandle = 0, const bool createThread = false ) = 0;xxxxxxxxxxclass QisMExploderV3: public QisMExploderV2 { ... };Get a handle to the db associated with this exploder
xxxxxxxxxxvirtual QisMFile* Parent() = 0;virtual const QisMFile* Parent() const = 0;Extension no. for
QisMExploder
xxxxxxxxxxclass QisMExploderV4: public QisMExploderV3 { ... };Get boundaries for all references to a particular cell and it's sub-trees in a view of the database
view_cell is the name of the view (current) cell
ref_cell is the name of the cell whose references are to be found
reuse_store if specified is the boundary container returned from a previous call, to be reused for this call in order to avoid memory allocations
opts is a string of optional parameters sepatated by <space>. See Get_cell_boundaries Options
Returns a non-null container of boundaries on success. Otherwise call Get_last_error_msg for error information
The container (if not re-used) MUST be eventually destroyed using Delete_store to avoid memory leak
xxxxxxxxxxvirtual NsQisMLib::QisMBStore* Get_cell_ref_boundaries( const char* view_cell, const char* ref_cell, NsQisMLib::QisMBStore* reuse_store = 0, const char* opts = 0 ) = 0;xxxxxxxxxx//Specify the region of interest as roi={minx},{miny},{maxx},{maxy} in file-unitsstatic const char* Key_ROI() { return "roi="; } //roi=%lf,%lf,%lf,%lf//Specify "ALL" or layers to be turned ON as a comma-separated string. All other layers will be OFF. static const char* Key_LAYERS_ON() { return "+layers="; } //+layers=%s//Specify "ALL" or layers to be turned OFF as a comma-separated string. All other layers will be ON. static const char* Key_LAYERS_OFF() { return "-layers="; } //-layers=%s//Output diagnostic information on a separate layer as dbg={lnum}:{dnum}static const char* Key_DBG() { return "dbg="; } //dbg=%d:%d//Pre-allocate memory to store the boundaries as reserve={est_num_vertices}static const char* Key_RESERVE() { return "reserve="; } //reserve=%lldsee qismview.h and qismexploder.h for the relevant C++ API
xxxxxxxxxxexploder.set_view$exploder={exploder_id}[reset] | {[cell={cellname}][layers_on={list} | layers_off={list}][window={minx},{miny},{maxx},{maxy}][nesting={level>0}][inside]}
Set the exploder view
Equivalent to various QisMExploder::Set_* methods in qismexploder.h or qismview.h
{exploder_id} represents name of a variable associated with the exploder
If reset is specified, all other options are ignored and the view is reset to default options
{cellname} if used, represents the view cell (default -- file.get_default_cell)
{list} if used, represents a comma-separated list of layers or "ALL" . e.g. 1,2:2,3:3,3:4,4 (default -- ALL on)
{minx}..{maxy} if used, represents the window co-ordinates in file units (default -- extents of the view cell)
{level} if used, represents the max. number of nesting levels to traverse (default -- all levels)
inside if used, only vectors fully inside the view window will be returned. Partially crossing vectors will be dropped (default -- all vectors crossing the view window, partial or full, will be processed)
xxxxxxxxxxexploder.get_boundaries $exploder={exploder_id} &bin={bin_id}
Get the boundaries for the view set in the exploder (see exploder.set_view) and store it in a container
Equivalent to QisMExploderV2::Get_boundaries in qismexploder.h
{exploder_id} represents name of a variable associated with the exploder
{bin_id} represents name of a variable associated with the container where the boundaries will be stored
Paths if any, will be converted to boundaries
Every container created using this command MUST be eventually destroyed using exploder.delete_store to avoid resource leaks
xxxxxxxxxxexploder.get_cellref_boundaries$exploder={id}cell={name}ref={name}&bin={id}[window={lx},{ly},{ux},{uy}][layers={ON|OFF},{string}][dbg={l:d}]
Get boundaries for every reference of a particular cell (including it's entire subtree) in the specified view.
$exploder={id} represents name of a variable associated with the exploder
cell={name} is the name of the view cell
ref={name} is the name of the cell being referenced
window=... is the region of interest in file-units (default: entire extents of the view cell)
layers=... can be "ALL" or a comma-separated string of layers to be turned ON or OFF (default: layers=ON,ALL)
&bin={id} represents name of a variable associated with the container where the boundaries will be stored
Paths if any, will be converted to boundaries
Every container created using this command MUST be eventually destroyed using exploder.delete_store to avoid resource leaks
xxxxxxxxxxfile.make_cellref_semiflat$filedb={id}out={path}[cell={name}][window={lx},{ly},{ux},{uy}][layers={ON|OFF},{string}][dbg={l:d}]
Generate a semi-flat file where the immediate children of the view cell are fully exploded and grouped into a single cell of the same name
$filedb={id} is the name of the database to be used
out={path} is the name of the output GDSII file path
cell={name} if specified becomes the view cell. Otherwise the default top cell is used
window=... if specified sets the ROI in file-units. Otherwise, the extents of the view cell is used
layers=... can be "ALL" or a comma-separated string of layers to be turned ON or OFF (default: layers=ON,ALL)
dbg={l:d} if used outputs misc. data (for debugging/diagnostics) on the specified layer (l:d)
xxxxxxxxxxexploder.delete_store $bin={bin_id}
Delete a container of boundaries only created by exploder.get_boundaries
{bin_id} represents name of a variable associated with the container to be destroyed
xxxxxxxxxxexploder.write_texts_to_file $exploder={exploder_id} file={ascii_file_path} [sort]
Explode TEXT data and write them to a file
Uses QisMExploder::Get_vector_data in qismexploder.h to collect TEXT vectors from a view
{exploder_id} represents name of a variable associated with the exploder
{ascii_file_path} is the path where an ASCII (text) file will be created
Each line of the file represents one TEXT vector in the format {text_string},{parent_cell},{x_dbu},{y_dbu},{layer},{texttype}
sort if specified will sort the items in format order before writing
xxxxxxxxxxexploder.write_srefs_to_file $exploder={exploder_id} file={ascii_file_path} [sort]
Explode SREF (single cell reference) data and write them to a file
Uses QisMExploder::Get_vector_data in qismexploder.h to collect SREF vectors from a view
{exploder_id} represents name of a variable associated with the exploder
{ascii_file_path} is the path where an ASCII (text) file will be created
Each line of the file represents one SREF vector in the format {ref_cell},{parent_cell},{x_dbu},{y_dbu},{scale},{angle},{mirror 'N' | 'X'}
sort if specified will sort the items in format order before writing
xxxxxxxxxxexploder.write_arefs_to_file $exploder={exploder_id} file={ascii_file_path} [sort]
Explode AREF (array cell reference) data and write them to a file
Uses QisMExploder::Get_vector_data in qismexploder.h to collect AREF vectors from a view
{exploder_id} represents name of a variable associated with the exploder
{ascii_file_path} is the path where an ASCII (text) file will be created
Each line of the file represents one AREF vector in the format {ref_cell},{parent_cell},{x_dbu},{y_dbu},{scale},{angle},{mirror 'N' | 'X'},{columns},{rows},{col_dx_dbu},{col_dy_dbu},{row_dx_dbu},{row_dy_dbu}
sort if specified will sort the items in format order before writing
| COUNT | CODE | OPERATION | NOTES |
|---|---|---|---|
| +1 | 11027 | QisMFile::Create_exploder | ONCE per call |
| -1 | 11027 | QisMFile::Destroy_exploder | ONCE per call |
| +1 | 11027 | file.create_exploder | ONCE per call |
| -1 | 11027 | file.destroy_exploder | ONCE per call |
Last Updated -- Wed Nov 19 18:22:00 UTC 2025