[Artwork] / [QisMLib] / [Programmer's Corner]
QisMLib Script CommandsConsole (qismscript64.exe) commands usage.requiredusage.optionusage.infosleepassertaskifsystemcommandsexitBasic (QisMScript) commands script.procedurescript.end_procedurescript.callscript.pushscript.popscript.requiredscript.ifscript.setscript.setifscript.ifsetscript.substrscript.tokenizescript.branchscript.foreachscript.convertscript.renamescript.make_idscript.num_cpusscript.file_namescript.new_window_setscript.delete_window_setscript.window_set_to_filescript.window_set_to_stringscript.print_varsQisMLib Commandslib.load_filelib.load_gds_with_mmapslib.unload_fileQisMFile commandsfile.print_reportfile.get_default_cellfile.print_cellsfile.print_top_cellsfile.print_child_cellsfile.get_cell_extentsfile.print_layersfile.print_cell_tree file.save_memory_mapsfile.create_exploderfile.destroy_exploderQisMExploder commandsexploder.set_viewexploder.get_boundariesexploder.delete_storeexploder.write_texts_to_fileexploder.write_srefs_to_fileexploder.write_arefs_to_fileQisMBStore commandsstore.print_infostore.write_as_polysstore.write_as_imageQisMDraw commandsdraw.imageQisMBool Commandsbool.create_instancebool.destroy_instancebool.create_settingsbool.destroy_settingsboolsettings.setboolinst.unionboolinst.binaryboolinst.delete_storeQisMExplCounter commandsexplcounter.break_window_by_crossingexplcounter.break_window_by_vertnumexplcounter.delete_windowsQisMWindowProbe commandsprobe.windowQisMCADWriter Commandscadwriter.open cadwriter.begin_cellcadwriter.boxcadwriter.box_setcadwriter.bstore cadwriter.boundarycadwriter.pathcadwriter.circlecadwriter.referencecadwriter.end_cellcadwriter.closeQisMRaster Commandsraster.create_rasterizerraster.destroy_rasterizerraster.create_paramsraster.destroy_paramsraster.windowraster.px_windowraster.polysraster.overlay_polysraster.synthesizedraster.create_pns_v2_specraster.destroy_pns_v2_specraster.window_pns_v2raster.format_imageraster.queue_mtraster.large_disk_imageraster.get_dpiraster.get_pixelsizeraster.compute_buf_szraster.compute_tile_szQisMLOA Commandsloa.create_ann_setloa.destroy_ann_setloa.add_ann_bitmaploa.add_ann_textloa.create_ann_set_from_fileloaset.to_fileloa.merge_ann_with_dbQisMCorrX Commandscorrx.create_affineaffine.setaffine.transformaffine.transform_bstorecorrx.destroy_affinecorrx.create_optscorrx.destroy_optscorrx.create_corrx_objcorrx.destroy_corrx_objcorrxobj.correct_viewcorrxobj.correct_polyscorrxobj.delete_storecorrxobj.print_corrected_extentscorrxobj.correct_window_extentscorrxobj.correctcorrxobj.correct_bstorecorrxobj.rasterize_windowcorrx.mirror_viewcorrx.shear_viewcorrx.rotate_viewcorrx.scale_viewcorrx.generate_ptsQisMOdbPS Commandsodbps.loadodbps.unloadQisMOdbScan Commandsodbscan.scanodbscan.destroy_resultsodbscan.generate_reportodbscan.print_step_treeodbscan.print_default_top_stepodbscan.print_top_stepsodbscan.print_stepsodbscan.print_step_tree_depthodbscan.print_step_childrenodbscan.print_step_all_descendantsodbscan.print_step_layersodbscan.print_step_all_layersodbscan.print_layersodbscan.print_layer_typeodbscan.print_layer_contextodbscan.print_profile_extentsQisMGbrPS commandsgbrpsfile.print_metagbrpsfile.save_gdsgbrps.unloadgbrps.loadQisMSnPUtil Commandssnputil.create_explodersnputil.destroy_explodersnpexploder.get_boundariessnpexploder.destroy_storesnputil.unionize_to_fileQisMHextract Commandshextract.create_extractorhextract.destroy_extractorhextract.create_optshextract.destroy_optshextract.create_regionshextractregions.addhextract.destroy_regionshextractor.extract_to_writerhextractor.extract_to_filehextract.create_dbhextractfile.save_ashextract.destroy_dbhextract.select_dbuQisMRTCR commandsrtcr.create_optsrtcr.destroy_optsrtcr.create_correctionsrtcr.destroy_correctionsrtcr.create_annotationsrtcrannotations.addrtcr.destroy_annotationsrtcr.setup_jobrtcr.end_jobrtcrjob.create_rasterizerrtcrjob.get_raster_imagertcrjob.destroy_rasterizerQisMMRtcr Commandsmrtcr.scan_infomrtcr.new_optsmrtcr.delete_optsmrtcr.new_imagemrtcr.delete_imagemrtcr.clear_imagemrtcr.generate_scanQisMLayerSynth commandslsynth.new_synthesizerlsynth.delete_synthesizerlsynth.synthesize_layerslsynth.delete_storeQisMBoolFiles commandstwofiles.xorQisMClipExtract commandsclip.extract_imagesclip.extract_polygonsclip.extract_lsynth
These commands are only applicable when using the scripting console (qismscript64.exe) to execute scripts or commands
xxxxxxxxxxusage.required {description}
Report mandatory paramters for using a script (one per line)
{description} is the appropriate description of the parameter
xxxxxxxxxxusage.option [{description}]
Report optional paramters for using a script (one per line)
{description} is the appropriate description of the parameter
xxxxxxxxxxusage.info {description}
Report any additional information relevant to a script
{description} is the appropriate information
xxxxxxxxxxsleepinterval={interval_s}
Sleep for the specified interval in seconds
xxxxxxxxxxassertkey={name}[msg={prompt}]
Alternative to script.required
Confirm that a string variable has been set. If not, exit the script with an error message
key={name} identifies the variable in question
[msg={prompt}] if specified will show up in the error message
The error message will appear as error: missing {name} or error: missing {name}={ {prompt} }
xxxxxxxxxxaskifkey={key}[msg={message}]
Check if the string variable {key} has been set. If not, prompt the user for a value
{message} is the appropriate message to add to the prompt
xxxxxxxxxxsystem {program} {args}*
Execute an application or command provided by the system (or shell)
{program} is the appropriate application/command to execute
{args} are one or more paramters to pass per the application/command's usage
xxxxxxxxxxcommands[{search-string}]
Get a list of available commands and it's paramters
{search-string} if specified only lists commands whose name/paramter-list contain the search string
xxxxxxxxxxexit
Terminate the execution of the script WITHOUT normally (without an error)
Various utility commands that aid in the development of a script Available to all applications using the QisMLib system with scripting enabled
xxxxxxxxxxscript.procedure {procedure_name}
Begin definition of a new procedure called {procedure_name}
Every script.procedure MUST have a matching script.end_procedure
Nested procedures are not allowed. i.e A procedure cannot define another procedure from within itself. It can however, call other procedures already defined at the time of execution
A procedure definition MUST appear before it is called using script.call or script.foreach
xxxxxxxxxxscript.end_procedure
Close the definition of the procedure in question
xxxxxxxxxxscript.call {procedure_name}
Execute the specified procedure (already defined at this point)
All the variables (object handles and strings) defined at this point are available to the called procedure
Procedures can call other procedures already defined at the time of execution
xxxxxxxxxxscript.push {token}+
Add one or more tokens to a list of tokens that will be passed to every subsequent command
xxxxxxxxxxscript.pop [{token}]
Remove the specified token from the list of tokens that will be passed to every subsequent command
If no token is specified, the entire list is cleared
xxxxxxxxxxscript.required {var_id}+
Confirm that all of the specified var(s) have been defined before proceeding with the next command to avoid unexpected outcomes of the subsequent command execution(s)
{var_id} represents name of one or more variables of type # (string variables) that can be referenced elsewhere in the script as ((var_id))
This command will return an error if even one of the specified var(s) have not been defined. If this command is part of a script file, the execution of that script will be terminated
xxxxxxxxxxscript.if {condition} {cmd} {args}*
Execute a command ONLY IF {condition} evaluated to TRUE
{condition} can be one of the following:
{key} : TRUE if a string variable called {key} is defined and not empty
!{key} : TRUE if a string variable called {key} is NOT defined or is empty
{key}=={value} : TRUE if a string variable called {key} has been set to {value}
{key}!={value} : TRUE if a string variable called {key} does not exist or has a value other than {value}
{key}~={value} : TRUE if a string variable called {key} CONTAINS the string {value}
{key}~!{value} : TRUE if a string variable called {key} DOES NOT CONTAIN the string {value}
{key1}|{key2}...|{keyn} : TRUE if at least one of the {key1...n} are defined
{key1}&{key2}...&{keyn} : TRUE if all of the {key1...n} are defined
{cmd} {args}* is the command to be executed if the condition is TRUE along with it's arguments
xxxxxxxxxxscript.set {{key}={value}}+
Define one or more string variables to be used in the script
Once defined, a string variable can be referenced elsewhere in the script using (({key}))
xxxxxxxxxxscript.setif {{key}={value}}+
Define one or more string variable ONLY IF not defined already
Once defined, a string variable can be referenced elsewhere in the script using (({key}))
xxxxxxxxxxscript.ifset {{key}={value}}+
Assign a value to one or more string variable ONLY IF that variable already has a value
Subsequently referencing that string variable elsewhere in the script using (({key})) will return the new value
xxxxxxxxxxscript.substrin={string}&out={var_name}old={sub_string_to_replace}new={replacement_sub_string}
Substitute all occurrence of {sub_string_to_replace} in an input string with {replacement_string}
The modified string is then stored in a string variable called {var_name} and can be accessed in the subsequent command using (({var_name}))
xxxxxxxxxxscript.tokenizein={string}&out={var_name}old={string_of_separators}new={char_separator}
Separate the specified string into tokens based on a list of character separators represented by {string_of_separators} and compose a new string where those tokens are concatenated using a new separator {char_separator}
The modified string is then stored in a string variable called {var_name} and can be accessed in the subsequent command using (({var_name}))
xxxxxxxxxxscript.branch script={script_file_path} [{key}={value}]*
Create a branch to another script as if executing a function defined in form of that script
{script_file_path} is the path of another script file containing commands representing the branch
{key}={value} are optional arguments that can be passed on to the branching script and are valid only for the duration of the branch execution
Nested branches are allowed. A branch can invoke branching commands to another script(s). There is no limit on the number of levels
Cyclic/recursive branching while possible is to be avoided as it may lead to infinite recursion (and therefore a stack overflow)
Errors from branching scripts are treated as warnings. Aborts (exit) are ignored
xxxxxxxxxxscript.foreach&token={var_name}{loop={from},{to},{increment}} | {list={list_of_tokens} | file={token_file}}{branch={script_file_path} | call={procedure_name}}[sep={separator}][{key}={value}]*
Execute a loop for each item in a list of items
loop= creates a for loop starting with an integer {from} upto {to} with a step of {increment}. On each run, the specified token is assigned the value of the for iterator. If {increment} is positive, the test is {from} <= {to}. Otherwise, the test is {from} >= {to}
Alternately list={list_of_tokens} creates a loop based on a string containing one or more tokens separated by separators. On each run, the specified token is assigned the current item from the list
Alternately, file={token_file} creates a loop based on a list of items in a text file, one item per line. On each run, the specified token is assigned the item at the current line
{separator} if used is a list of characters to be used as separators in the list. Default separator is , (comma)
{var_name} represents the name of a string variable that will temporarily hold a token from the specified list. The value of this token will change as this command iterates through the specified list
{script_file_path} is the path of another script file containing commands representing the branch to be executed for each token in the list (as if it's a function)
{procedure_name} is name of a procedure that has already been defined at this point in the execution
{key}={value} are optional arguments that can be passed on to the branching script and are valid only for the duration of the script.foreach command
Nested branches are allowed. A branch can invoke branching commands to another script(s). There is no limit on the number of levels
Nested procedure calls are not allowed
Cyclic/recursive branching while possible is to be avoided as it may lead to infinite recursion (and therefore a stack overflow)
Errors from branching scripts are treated as warnings. Aborts (exit) are ignored
xxxxxxxxxxscript.convertfrom={spec}to={spec}values={list}[&var={id}]
Convert a comma-separated list of values from one unit to another
{spec} can be one of the following :-
m
cm
mm
um
nm
in
mils
dpi
dbu,{db_id}
uu,{db_id}
For dpi conversions, the value to be converted is implied to be the pixel-size (or the dot-size)
{db_id} is a variable of type QisMFile* representing the database in question. dbu is the database-unit and uu is the user-unit of that database
values provides a comma-separated list of values in the source (from) units
scale if specified multiplies the result with the specified value
&var if specified will add a new string variable represented by {id} containing a comma-separated list of results
E.g --
from=um to=dpi values=1 will result in 25400. I.e a pixel of size 1um is equivalent to 25400 dots-per-inch
from=mm to=um values=1,0.001 will result in 1000,1
For a UM db F with NM resolution (units = 1e-6 m and grid = 1e-9 m),
from=uu,F to=dpi values=1 will result in 25400 (1um = 25400dpi)
from=dpi to=dbu,F values=25400 will result in 1000 (25400dpi = 1000nm)
xxxxxxxxxxscript.rename $old={old_id} type={type_name} $new={new_id}
Move a script variable of name {old_id} and type {type_name} to a new name {new_id}
The old id for the specified type will cease to exist from this point on
The type remains the same
CAUTION -- Any other dependent variables that were added alongside {old_id} such as {old_id}.{something} will continue to exist as is. Therefore, this command should be used sparingly and only when there is no other alternative solution
xxxxxxxxxxscript.make_id str={string} &id={id}
Convert an arbitrary string {string} into another string {id} that is more suitable to be used as a script variable name
Replaces most non-alphanumeric characters with an underscore or a hyphen
Does not guarantee uniqeness. Two non-identical strings could potentially result in the same id
xxxxxxxxxxscript.num_cpus [&var={name}]
Print the no. cpu(s) in the system
If name is specified, the value is stored as a string variable by that name
xxxxxxxxxxscript.file_namepath={file_path}[&dir={var}][&name={var}][&ext={var}][&basename={var}][&full={var}]
Get various components of a file at the specified {file_path}
&dir if specified, retrieves the directory
&name if specified, retrieves the file name (with extension)
&ext if specified, retreives the extension
&basename if specified, retreives the name (without extension)
&full if specified, get the absolute full path
xxxxxxxxxxscript.new_window_set&set={set_id}llur={name}:{lx},{ly},{ux},{uy}llwh={name}:{lx},{ly},{width},{height}cwh={name}:{cx},{cy},{width},{height}@llur={name}:{txt_file}@whll={name}:{txt_file}@whc={name}:{txt_file}tilerc={name}:{roi_lx},{roi_ly},{roi_ux},{roi_uy}:{cols},{rows}[:{i},{j}]*tilewh={name}:{roi_lx},{roi_ly},{roi_ux},{roi_uy}:{width},{height}[:{i},{j}]*cxy={name}:{width},{height}[:{cx},{cy}]+rand={name}:{roi_lx},{roi_ly},{roi_ux},{roi_uy}:{width},{height}:{count}
Create a new set of rectangular windows
Multiple arguments can be used for building a cumulative set
All co-ordinates and dimensions are in file-units (e.g um, mm, inch) associated with the CAD source
{set_id} represents name of the variable of type QisMBoxSet* associated with the newly created set
The QisMBoxSet C++ interface can be found in qismbase.h
{name} is a string identifier associated with a window which may be used to determine the name of the output file corresponding to that window
{lx}, {ly}, {ux}, {uy} represent lower-left and upper-right co-ordinates
{width}, {height} represent the window size
{cx}, {cy} represents co-ordinates of the window center
{txt_file} is the path to an existing text file which contains the following :-
for @llur= , each line contains {lx},{ly},{ux},{uy} representing one window
for @llwh= , the first line contains {width},{height} representing the window size and each subsequent lines contains {lx},{ly} representing the position of the window's lower-left corner
for @cwh= , the first line contains {width},{height} representing the window size and each subsequent lines contains {cx},{cy} representing the position of the window's center
For generating tiles, {roi_lx},{roi_ly},{roi_ux},{roi_uy} represents the region of interest (ROI) to be tiled
{cols},{rows} represents the number of tiles along X and Y respectively
{width}, {height} represent the tile size
{i},{j} is optional represents the position of one or more tiles to be added (1 <= i <= {cols} and 1 <= j <= {rows}). If used, all other tiles not in this list will be dropped
For the random tile generator rand= , {count} represents the number of tiles to be generated at random locations within the ROI
Every set created using this command MUST be eventually destroyed by the script using script.delete_window_set to avoid resource leaks
xxxxxxxxxxscript.delete_window_set $set={set_id}
Delete a rectangular window set created using script.new_window_set
{set_id} represents name of the variable of type QisMBoxSet* associated with set to be destroyed
xxxxxxxxxxscript.window_set_to_file $set={set_id} path={txt_file_path}
Write the specified set of windows to a TEXT file
{set_id} represents name of the variable of type QisMBoxSet* associated with set to be used
{txt_file_path} is the path of a TEXT file to be written where each line of the text file represents one window from the set in the format {minx},{miny},{maxx},{maxy}
xxxxxxxxxxscript.window_set_to_string$set={set_id}&out={var_name}sep={char}
Create a string from the co-ordinates of the windows from the specified set of windows
{set_id} represents name of the variable of type QisMBoxSet* associated with set to be used
The new string is then stored in a string variable called {var_name} and can be accessed in the subsequent command using (({var_name}))
The format of that string is {minx},{miny},{maxx},{maxy}[{char}{minx},{miny},{maxx},{maxy}]* where {char} is the new separator of windows
xxxxxxxxxxscript.print_vars
Print the complete list of script variables and their values available at this moment
Each variable will be reported as {type}.{name} = {value}
For variables that represent object handles, {value} is an address
See qismlib.h for the relevant C++ API
xxxxxxxxxxlib.load_file&filedb={filedb_id}input={input_file_path}[layermap={layer_map_str}][notext] [diskload] [emptyrefs]
Create a database from a GDSII/OASIS/DBLOAD file
Equivalent to QisMLib::Load_file in qismlib.h
{filedb_id} represents name of a variable of type QisMFile* associated with the newly created database
{input_file_path} is the path of a valid GDSII/OASIS/DBLOAD file
{layer_map_str} if used, is a string specifying the layer mapping. e.g. ALL-NULL,1-100,2:2-200:2,3-300:0
re-map 1:* to 100:*
re-map 2:2 to 200:2
re-map 3:* to 300:0 (combine all datatypes of 3)
drop all other layers
notext if used, drops all TEXT items
diskload if used, retains the data section of the database on disk to reduce the memory footprint at the cost of operational speed
emptyrefs if used, loads references to empty cells
Every database created using this command MUST be eventually unloaded using lib.unload_file to avoid resource leaks
This command will define two new string variables {filedb_id}.grid and {filedb_id}.units corresponding to the file grid (in meters) and units (in meters). They can be referenced elsewhere in the script using (({filedb_id}.grid)) and (({filedb_id}.units)) respectively. These will only be available while the database is alive (until lib.unload_file is called)
xlib.load_gds_with_mmaps&filedb={id}gds={path}[mapsdir={dir_path}][layermap={layermap_string}][notext][memload][emptyrefs]
Load a GDSII file with the option of making use of .load memory maps (database disk image) to speed up the loading
Equivalent to the C++ API QisMLibV3::Load_gds_with_memory_maps (qismlib.h)
{id} is name of a variable of type QisMFile* to be associated with the newly created database object
{path} is the path of the source GDSII file to be loaded (which was also used to create the memory maps)
{dir_path} if specified is the directory to find the .load and .scan memory map files. If omitted, the map files are implied to reside in the current working directory
{layermap_string} if specified filters/re-maps layers. See lib.load_file for syntax
notext if specified ignores TEXT elements. (default: TEXT elements if present are loaded)
memload if specified loads the database in memory for faster operations. (default: the database is loaded from disk)
emptyrefs if specified drops all references to empty cells
Every database object created with this command MUST be eventually destroyed using lib.unload_file to avoid memory/resource leaks
If suitable memory maps are not found or the ones that are found have incompatible characteristics, the specified GDSII file is loaded directly without taking advantage of any memory maps just like lib.load_file
xxxxxxxxxxlib.unload_file $filedb={filedb_id}
Destroy a QisMFile database
Equivalent to QisMLib::Unload_file in qismlib.h
{filedb_id} represents name of a variable of type QisMFile* associated with the database to be destroyed
See qismfile.h for relevant C++ API
xxxxxxxxxxfile.print_report $filedb={filedb_id}
Print the report for the specified database
Equivalent to QisMFile::Get_file_report in qismfile.h
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job
xxxxxxxxxxfile.get_default_cell $filedb={filedb_id} [&var={var_id}]
Get the name of the default cell (top cell with the deepest hierarchy or largest extents)
Equivalent to QisMFile::Get_default_top_cell in qismfile.h
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job
{var_id} if used, sets a string variable of that name to the returned cell name so that it can be used in the subsequent script commands using (({var_id})). e.g. &var=CELL will cause all occurrences of ((CELL)) in the subsequent commands to be replaced by the returned cell name before those commands are executed
xxxxxxxxxxfile.print_cells $filedb={filedb_id} [extents] [&var={var_name}]
Print a list of all cells in the database
Equivalent to QisMFile::Get_cell_list in qismfile.h
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job
extents if used, also prints the extents of each cell in the list
{var_name} if used represents name of a string variable to store comma-separated list of cell names. It can be referenced in subsequent commands using (({var_name}))
xxxxxxxxxxfile.print_top_cells $filedb={filedb_id} [extents] [&var={var_name}]
Print a list of top cells in the database
Equivalent to QisMFile::Get_top_cell_list in qismfile.h
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job
extents if used, also prints the extents of each cell in the list
{var_name} if used represents name of a string variable to store comma-separated list of cell names. It can be referenced in subsequent commands using (({var_name}))
xxxxxxxxxxfile.print_child_cells $filedb={filedb_id} cell={cellname} [extents] [&var={var_name}]
Print a list of cells directly referenced by the specified cell
Equivalent to QisMFile::Get_cell_children_list in qismfile.h
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job
extents if used, also prints the extents of each cell in the list
{var_name} if used represents name of a string variable to store comma-separated list of cell names. It can be referenced in subsequent commands using (({var_name}))
xxxxxxxxxxfile.get_cell_extents $filedb={filedb_id} [cell={cellname}] [&var={var_id}]
Get extents of the specified cell
Equivalent to QisMFile::Get_cell_extents in qismfile.h
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job
{cellname} if used, represents the name of the cell in question. If omitted, the default cell is used
{var_id} if used, sets a string variable of that name to the returned extents so that it can be used in the subsequent script commands using (({var_id})). e.g. &var=EXTS will cause all occurrences of ((EXTS)) in the subsequent commands to be replaced by the returned extents before those commands are executed. The extents are preserved in the format {minx},{miny},{maxx},{maxy}
xxxxxxxxxxfile.print_layers $filedb={filedb_id} &var={var_name}
Print a list of all layers in the database
Equivalent to QisMFile::Get_layer_list in qismfile.h
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job
{var_name} if used represents a string variable to store a comma-separated list of layer:datatype. It can be referenced in subsequent commands using (({var_name}))
xxxxxxxxxxfile.print_cell_tree $filedb={filedb_id} [cell={cellname}] [&var={name}] [sep={open}{close}{next}]
Print the tree (hierarchy) for the specified cell
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job
{cellname} if used, is the name of the cell whose tree is to be printed. If omitted, the entire database hierarchy (trees of all top cells) is printed
[&var={name}] if used stores the entire cell hierarchy in a parser-friendly string variable of the specified name. In that case, [sep={open}{close}{next}] can be used to control the separators as follows --
{open} is a single character that indicates the start of sub-tree for the current cell. Default: {
{close} is a single character that indicates the end of the sub-tree for the current cell. Default: }
{next} is a single character that indicates the next cell at the same hierarchy. Defaul: ,
xxxxxxxxxxfile.save_memory_maps $filedb={filedb_id} [outdir={output_directory}]
Save the database as memory maps (cache) on disk
This feature works for GDSII files only
Equivalent to QisMFileV2::SaveAs_memory_maps in qismfile.h
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job
xxxxxxxxxxfile.create_exploder &exploder={exploder_id} $filedb={filedb_id}
Create an instance of the exploder (spatial query object)
Equivalent to QisMFile::Create_exploder in qismfile.h
Requires 1 license of license (11027) per call
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job
{exploder_id} represents name of a variable of type QisMExploder* associated with the exploder to be created
Every exploder object created using this command MUST be destroyed using file.destroy_exploder to avoid resource leaks
xxxxxxxxxxfile.destroy_exploder $exploder={exploder_id} $filedb={filedb_id}
Destroy an exploder
Equivalent to QisMFile::Destroy_exploder in qismfile.h
Releases 1 license of (11027) acquired during file.create_exploder
{filedb_id} represents name of a variable of type QisMFile* associated with a file database created using lib.load_file or rtcr.setup_job that was used to create this exploder
{exploder_id} represents name of a variable of type QisMExploder* associated with the exploder to be destroyed
see 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 of type QisMExploder* 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 of type QisMExploder* associated with the exploder
{bin_id} represents name of a variable of type QisMBStore* 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.delete_store $bin={bin_id}
Delete a container of boundaries of type QisMBStore* only created by exploder.get_boundaries
{bin_id} represents name of a variable of type QisMBStore* 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 of type QisMExploder* 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 of type QisMExploder* 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 of type QisMExploder* 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
See qismbstore.h for relevant API
xxxxxxxxxxstore.print_info $bin={bin_id}
Print information about a container of boundaries
{bin_id} represents name of a variable of type QisMBStore* associated with the container to be written
xxxxxxxxxxstore.write_as_polys$bin={bin_id}path={output_base_path}grid={grid_m}units={units_m}[format={GDS | OAS}][top={top_cellname}]
Write a boundary container to disk as a GDSII or OASIS file
{bin_id} represents name of a variable of type QisMBStore* associated with the container to be written
{output_base_path} is the directory + file name of the output file. The extension (.gds or .oas) is automatically added based on the format
{grid_m} and {units_m} are the file grid and units in meters. e.g for a micron file with nano meter resolution, grid = 1e-9 (nm) and units = 1e-6 (um)
format if used determines the file format. Default -- GDS
{top_cell_name} if used writes the top cell name as specified. Default -- "TOP"
xxxxxxxxxxstore.write_as_image$bin={bin_id}path={output_base_path}grid={grid_m}units={units_m}resolution={PXSIZE | DPI | GRID},{x}[,{y}][format={TIF | TIF8 | BMP | RAW}][invert][right_to_left][dither=0.0-1.0]
Write a boundary container as a monochrome bitmap image in TIFF/BMP/RAW format
Requires the QisMRaster extension to be installed and configured
Requires 1 license of (14827) per call
{bin_id} represents name of a variable of type QisMBStore* associated with the container to be written
{output_base_path} is the directory + file name of the output file. The extension (.tif, .bmp or .raw) is automatically added based on the format
{grid_m} and {units_m} are the file grid and units in meters. e.g for a micron file with nano meter resolution, grid = 1e-9 (nm) and units = 1e-6 (um)
resolution can be specified in both X and Y directions as :-
PXSIZE -- size of 1 pixel in file units
DPI -- dots per inch
GRID -- as a multiple of the file grid
Pixels can be square {x} == {y} or rectangle {x} != {y} . If {y} is omitted, {y} = {x}
format if specified, determines the file format. Default -- TIF
invert if used, reverses the image polarity (black (0) data on white (1) background)
right_to_left if used, rasterizes the data from right to left. i.e. min-x of the data appears on the right hand size (max-x) of the image
dither if used, generates a dithered image using a 8x8 Bayer matrix. The dithering value must be from 0.0 (max. 0 pixels/8x8 pixel data block) to 1.0 (max. 64 pixels/8x8 pixel data block)
See qismdraw.h for the corresponding C++ API
xxxxxxxxxxdraw.image $filedb={filedb_id} [path={img_path_base}] [cell={cellname}] [layers={layer_list}] [window={minx},{miny},{maxx},{maxy}] [nesting={level}] [format={GIF | DIB | XPM}] [background={BLACK | WHITE}] [filtersize={dfs}] [fill={ON | OFF}] [text={ON | OFF}] [res={x},{y}] [refboxes={ON | OFF | NL}]Render a view of the database to an colored image file on disk
Makes use of the QisMDraw API defined in qismdraw.h
Requires ONE license of (11057) per call
{filedb_id} is name of the variable of type QisMFile* associated with the file database
{img_base_path} if specified generates an output file at the specified path (extension automatically added). Otherwise, the image is generated but not written to disk
{cellname} if specified set the view cell. Default view cell is the deepest top cell
{layer_list} if specified, is a comma-separated list of layer and/or layer:datatype numbers to be visible. Default: ALL loaded layers
{minx}..{maxy} if specified represents the window to be set (adjusted to match the image aspect ratio). Default: Extents of the view cell is used
{level} if specified sets a max. nesting level for drawing. Default: ALL levels
format if specified sets the output file format. Default: GIF. XPM is only available on Linux.
background if specified sets the background color. Default: BLACK
{dfs} if specified sets the display filter size (for both geometries and references). Default: 0
fill controls the fill mode. Default : OFF
text controls if TEXT elements are drawn. Default: ON
{x},{y} if used is the image resolution in pixels along X and Y. Default: 800, 600 pixels
refboxes if specified controls if the references are drawn with outlines and labels. If ON, references at all nesting levels are drawn with outline and labels. If OFF, outlines and labels are not drawn. If NL, outlines and labels are only drawn for references at the specified nesting level (> 0)
See qismbool.h for the relevant C++ API
xxxxxxxxxxbool.create_instance &bool={boolinst_id}
Create an instance of the Boolean object
Equivalent to QisMBool::Create_instance in qismbool.h
{boolinst_id} is name of a variable of type QisMBoolInst* to be associated with the newly created Boolean object
Requires ONE license of (11047) which is released by bool.destroy_instance
Every object created by this command MUST be eventually destroyed by bool.destroy_instance to avoid resource leaks
xxxxxxxxxxbool.destroy_instance $bool={boolinst_id}
Destroy an instance of the Boolean object
Equivalent to QisMBool::Destroy_instance in qismbool.h
{boolinst_id} is name of a variable of type QisMBoolInst* associated with the object to be destroyed
xxxxxxxxxxbool.create_settings &settings={settings_id}
Create an instance of the Boolean settings object
Equivalent to QisMBool::New_settings in qismbool.h
{settings_id} is name of a variable of type QisMBoolSettingsV2* to be associated with the newly created object
Every object created by this command MUST be eventually destroyed by bool.destroy_settings to avoid memory leak
xxxxxxxxxxbool.destroy_settings $settings={settings_id}
Destroy an instance of the Boolean settings object
Equivalent to QisMBool::Delete_settings in qismbool.h
{settings_id} is name of a variable of type QisMBoolSettingsV2* associated with the object to be destroyed
xxxxxxxxxxboolsettings.set$settings={settings_id}[reset][sliver={sliver_value}][clip={minx},{miny},{maxx},{maxy}][butting={overlap}][maxvert={count}][passthru={ON | OFF}][mergestripes={ON | OFF}][convex={OFF | X | Y | FULL | HTRAP | VTRAP}][sizing={OFF | STD | ISOTR | NONISOTR}[,{sizing_x}[,{sizing_y}]]][rndcorners={RTANGLE | THREEPT | FIVEPT}][cutlines] [lnvout] [lnvin={A | B | ALL | NONE}][grid={grid_m}] [units={units_m}][dbg={text_file}]
Set various Boolean settings
Equivalent to QisMBoolSettingsV2::Set_param in qismbool.h
{settings_id} is name of a variable of type QisMBoolSettingsV2* associated with the settings object to be used
reset if specified, resets all the settings to default values first before applying any other parameters
{sliver_value} if specified sets the sliver parameter for removal of polygons (slivers) smaller than the specified threshold (in file units). Default: no filtering of tiny polygons
{minx}..{maxy} if specified sets the clipping window (in file units). Any polygon crossing this window will be clipped. Default: no clipping
{overlap} if specified (even 0.0), sets the polygon output mode to BUTTING with the specified overlap value along butting edges (in file units). Default: Polygons with holes have cutlines
{count} if specified sets the max. vertex count for any output polygon. Larger polygons are broken up into smaller ones. Default: 8190 vertices
passthru if specified sets/resets the pass through mode. If ON, the core boolean operation will be bypassed and only the output formatting procedures (such as clipping) will be run (Works only with boolinst.union). Default: OFF
mergestripes if ON will force the removal of all edges that were created because of data partitioning across multiple threads. Default: OFF
convex if specified activates convex mode for the output polygons. Default: OFF
sizing if specified activates the sizing mode for output polygons. Default: OFF. For STD and ISOTR, {sizing_x} MUST be specified (in file units). For NONISOTR, both {sizing_x} and {sizing_y} MUST be specified
rndcorners if specified controls sharp corners are handled during sizing. Default: (if ISOTR | NONISOTR sizing) THREEPT
lnvout if specified sets the output polygon format to Leonov
cutlines if specified sets the output polygon format to cutlines
lnvin if specified indicates the format for the source polygons. A , B implies that only the specified operand is in Leonov format. ALL implies both operands are Leonov. NONE (default) implies none of the operands are Leonov.
{grid_m} and {units_m} if specified represent the data units and resolution. Default: 1e-9 (nm) and 1e-6 (um) respectively
All dimensional values in file units
dbg if specified generates a {text_file} with detailed information about the internal state of the boolean object
xxxxxxxxxxboolinst.union$bool={boolinst_id}$settings={settings_id}$in={input_bin_id}&out={output_bin_id}[thrnum={n_threads}][layer={layer}]
Unionize a set of polygons
Equivalent to QisMBoolInst::UnionMT in qismbool.h
{boolinst_id} is name of a variable of type QisMBoolInst* associated with the boolean object to be used
{settings_id} is name of a variable of type QisMBoolSettingsV2* associated with the object holding the boolean settings
{input_bin_id} is name of a variable of type QisMBStore* associated with a set of polygons to be used as the source
{output_bin_id} is name of a variable of type QisMBStore* to be associated with the newly created set of resulting polygons
{n_threads} if specified indicates the number of threads to be used for this operation. Default: no. system processors
layer if specified indicates the layer number to be associated with the output polygons. Default : 0
The output set of polygons MUST be eventually destroyed using boolinst.delete_store to avoid memory leak
xxxxxxxxxxboolinst.binary$bool={boolinst_id}$settings={settings_id}$bin_a={operand_a_bin_id}$bin_b={operand_b_bin_id}&out={output_bin_id}[op={UNION | INTERSECTION | DIFFERENCE | XOR}][thrnum={n_threads}][layer={layer}]
Perform binary operation between two sets of polygons
Equivalent to QisMBoolInst::BinaryMT in qismbool.h
{boolinst_id} is name of a variable of type QisMBoolInst* associated with the boolean object to be used
{settings_id} is name of a variable of type QisMBoolSettingsV2* associated with the object holding the boolean settings
{operand_a_bin_id} and {operand_b_bin_id} are names of variables of type QisMBStore* associated with a set of polygons to be used as the operand A and operand B respectively. The operation to be performed is A op B.
{output_bin_id} is name of a variable of type QisMBStore* to be associated with the newly created set of resulting polygons
op if specified represents the boolean operator. Default: UNION
{n_threads} if specified indicates the number of threads to be used for this operation. Default: no. system processors
layer if specified indicates the layer number to be associated with the output polygons. Default : 0
The output set of polygons MUST be eventually destroyed using boolinst.delete_store to avoid memory leak
xxxxxxxxxxboolinst.delete_store $bin={bin_id}
Destroy a set of polygons created by boolinst.union or boolinst.binary ONLY
{bin_id} is name of a variable of type QisMBStore* associated with the polygon set to be destroyed
Equivalent to QisMBoolInst::Release in qismbool.h
See qismexplcounter.h for the relevant C++ API
xxxxxxxxxxexplcounter.break_window_by_crossing $filedb={filedb_id} [gds={output_gds_path}] [cell={cellname}] [layers={layer_list}] [window={minx},{miny},{maxx},{maxy}] [maxd={max_quad_depth}] [maxv={max_vertices_per_quad}] [limitpct={percentage}] [lout={output_layer}] [&var={set_id}]Break a region of interest into tiles based on the no. vertices crossing a region of the ROI
Uses a quad-tree based algorithm to compute density map. Suitable for cases where the no. intersections between polygons outweigh the no. vertices
{filedb_id} is name of a variable of type QisMFile* associated with the file database to be used
{cellname} if specified is the view cell to be used. Default : default top cell
{layer_list} is a comma-separated list of layer or layer:datatype numbers to be treated as a single group. Default: ALL available layers
window if specified represents the region of interest (default: extents of the view cell)
{output_gds_path} if specified, generates a (GDSII) file at the specified path illustrating the newly computed windows
{max_quad_depth} if specified controls the resolution of the density map by setting the max. depth of the quad-tree. Increasing the depth increases the resolution of the density map (default: 8)
{max_vertices_per_quad} if specified controls the breaking up of quads based on the max. no. vertices per leaf quad (default: 1024). Increasing the max. no. vertices reduces the resolution of the density map
{percentage} if specified limits the no. output tiles to the specified percentage of the original no. computed tiles (default: 100)
{output_layer} if specified writes the tiles to {output_layer}:0 in the output file
{set_id} if specified, is name of a variable of type QisMBoxSet* associated with a newly created list of tiles. It MUST be eventually destroyed using explcounter.delete_windows
xxxxxxxxxxexplcounter.break_window_by_vertnum $filedb={filedb_id} maxvert={max_vert_per_window} [cell={cellname}] [layers={layer_list}] [$tiles={window_set_id}] [thrnum={n_threads}] [gds={output_gds_path}] [minvert={min_vert_per_window}] [&var={new_set_id}]Break a region of interest into tiles based on the no. vertices contained within (a.k.a density map of the ROI)
Equivalent to QisMExplCounterV3::Break_window_by_vertnum in qismexplcounter.h
{filedb_id} is name of a variable of type QisMFile* associated with the file database to be used
{max_vert_per_window} is the max. no. vertices contained in any of the computed tiles. Larger windows will be broken up into smaller ones until this criteria is satisfied
{cellname} if specified is the view cell to be used. Default : default top cell
{layer_list} is a comma-separated list of layer or layer:datatype numbers to be treated as a single group. Default: ALL available layers
{window_set_id} if specified is name of a variable of type QisMBoxSet* associated with a list of windows that represents a pre-computed tiles over which this computation will be performed. Use this to:
Perform computation only over select areas of the view
Control the aspect ratio of the computed tiles
Save time by breaking up the ROI into smaller tiles
{n_threads} if specified is the no. threads to be used to perform this operation. Default: 0 i.e no. cpus in the system. If {n_threads} > 1, the input ROI(s) may be further split into smaller tiles for better multi-threaded load sharing
{output_gds_path} if specified generates a .sf (GDSII) file at the specified path illustrating the newly computed windows
{min_vert_per_window} is the min. no. vertices per window. Windows smaller than this count will be dropped from the output
{set_id} if specified, is name of a variable of type QisMBoxSet* associated with a newly created list of tiles. It MUST be eventually destroyed using explcounter.delete_windows
xxxxxxxxxxexplcounter.delete_windows $windows={set_id}
Destroy a set of windows allocated by the explcounter commands
{set_id} is name of a variable of type QisMBoxSet* associated with the list of windows to be destroyed
See qismwindowprobe.h for relevant C++ API
xxxxxxxxxxprobe.window$filedb={filedb_id}window={minx},{miny},{maxx},{maxy}[cell={cellname}][layers={layer_list}][nesting={nesting_level}]
Probe a rectangular window to collect statistical information corresponding to an extensible list of parameters
Makes use of QisMWindowProbeObj class in qismwindowprobe.h
{filedb_id} represents name of a variable of type QisMFile* associated with the file database to be probed
{minx}..{maxy} are the extents of the window to be probed
{cellname} if used represents the view cell (otherwise, the default top cell is used)
{layer_list} if used is a comma separated list of layer[:datatype] or "ALL". Default is ALL layers
{nesting_level} if used is the max. nesting level to probe up to. Default is 0 (all nesting levels)
At the moment, the following parameters are probed and printed:
Polygon extents : Cumulative extents of all the polygons that cross the specified view
Polygon counts : Total number of polygons that cross the specified view
Polygon vertex counts : Sum of vertices of all polygons that cross the view
xxxxxxxxxxcadwriter.open&writer={writer_id}grid_m={grid_in_meters}units_m={units_in_meters}path={output_file_path}[format={GDS|OAS}]
Open a GDSII/OASIS file composer
{writer_id} is name of a variable of type QisMCADWriterV2* to be associated with the writer object
{grid_in_meters} is the file resolution expressed in meters
{units_in_meters} is the file units expressed in meters
{output_file_path} is the path (dir + name + extension) where the output file will be created
format if specified determines the file format (default : GDS)
Every open MUST have a corresponding close
xxxxxxxxxxcadwriter.begin_cell $writer={writer_id} name={cellname}
Open a cell definition
{writer_id} is name of a variable of type QisMCADWriterV2* associated with an open writer object
{cellname} is name of the cell to be defined
Every begin_cell MUST have a corresponding end_cell
xxxxxxxxxxcadwriter.box$writer={writer_id}box={minx},{miny},{maxx},{maxy}[layer={layer}:{datatype}]
Write a rectangular box to the current cell
{writer_id} is name of a variable of type QisMCADWriterV2* associated with an open writer object
{minx}..{miny} are the min-max extents of the box in file units
{layer}:{datatype} if specified is the layer to be associated with the box (default: 0:0)
xxxxxxxxxxcadwriter.box_set$writer={writer_id}$set={box_set_id}[layer={layer}:{datatype}]
Write a set of rectangular boxes to the current cell
{writer_id} is name of a variable of type QisMCADWriterV2* associated with an open writer object
{box_set_id} is name of a variable of type QisMBoxSet* associated with the set of boxes to be written
{layer}:{datatype} if specified is the layer to be associated with the box (default: 0:0)
xxxxxxxxxxcadwriter.bstore$writer={writer_id}$bin={bstore_id}
Write a set of boundaries to the current cell
{writer_id} is name of a variable of type QisMCADWriterV2* associated with an open writer object
{bstore_id} is name of a variable of type QisMBStore* associated with the set of boundaries to be written
xxxxxxxxxxcadwriter.boundary$writer={writer_id}{{deltas={dx0},{dy0},{dx1},{dy1}[,{dx},{dy}]* pos={x},{y}} | xy={x1},{y1}..{xn},{yn}}[repeat=NM,{n},{ndx},{ndy},{m},{mdx},{mdy} | repeat=PTS,{dx0},{dy0}..{dxn},{dyn}][layer={layer}:{datatype}]
Write a boundary to the current cell (with or without repetitions)
All co-ordinates are in file units
{writer_id} is name of a variable of type QisMCADWriterV2* associated with an open writer object
deltas is a list of offsets from the boundary origin 0,0 that form the vertices of the boundary. There MUST be at least two deltas to form a boundary (with 4 vertices). When specifying the deltas, the origin 0,0 and the last delta (to close the boundary) are implied and therefore omitted. e.g deltas=100,0,0,100,-100,0 defines a square of length 100.
Alongside deltas, pos is the location where the first instance of the boundary is to be placed
Alternately, one can specify the co-ordinates of the boundary using an x,y list xy=
{layer}:{datatype} if specified is the layer to be associated with the box (default: 0:0)
Repetitions (optional) can be specified in two forms:
Regular repetition is specified using the number of instances {n} in one direction with offsets {ndx},{ndy} and {m} instances in an orthogonal direction with offsets {mdx},{mdy}.
Arbitrary repetition is specified using a set of deltas {dx},{dy} from the first instance
xxxxxxxxxxcadwriter.path$writer={writer_id}{{deltas={dx0},{dy0},{dx1},{dy1}[,{dx},{dy}]* pos={x},{y}} | xy={x1},{y1}..{xn},{yn}}width={path_width}[type={FLUSH | HALF | ROUND}][repeat=NM,{n},{ndx},{ndy},{m},{mdx},{mdy} | repeat=PTS,{dx0},{dy0}..{dxn},{dyn}][layer={layer}:{datatype}]
Write a path to the current cell (with or without repetitions)
All co-ordinates are in file units
{writer_id} is name of a variable of type QisMCADWriterV2* associated with an open writer object
deltas is a list of offsets from the path origin 0,0 that form the vertices of the path. There MUST be at least one delta to form a path (with 2 vertices). When specifying the deltas, the origin 0,0 is implied and therefore omitted. e.g deltas=100,0 defines a one-segment horizontal path of length 100 units.
Alongside deltas, pos is the location where the first instance of the boundary is to be placed
Alternately, one can specify the co-ordinates of the path using an x,y list xy=
{path_width} MUST be specified (> 0.0)
{layer}:{datatype} if specified is the layer to be associated with the box (default: 0:0)
type if specified represents the path type. Default: FLUSH
Repetitions (optional) can be specified in two forms:
Regular repetition is specified using the number of instances {n} in one direction with offsets {ndx},{ndy} and {m} instances in an orthogonal direction with offsets {mdx},{mdy}.
Arbitrary repetition is specified using a set of deltas {dx},{dy} from the first instance
xxxxxxxxxxcadwriter.circle$writer={writer_id}circle={x},{y},{radius},{arcres},{arcsag}[repeat=NM,{n},{ndx},{ndy},{m},{mdx},{mdy} | repeat=PTS,{dx0},{dy0}..{dxn},{dyn}][layer={layer}:{datatype}]
Write a circle (converted to a polygon) to the current cell (with or without repetitions)
All co-ordinates are in file units
{writer_id} is name of a variable of type QisMCADWriterV2* associated with an open writer object
{x},{y} are the co-ordinates of the center, {arcres} and {arcsag} specify the fineness of the approximation of the polygon w.r.t the circle
{layer}:{datatype} if specified is the layer to be associated with the box (default: 0:0)
Repetitions (optional) can be specified in two forms:
Regular repetition is specified using the number of instances {n} in one direction with offsets {ndx},{ndy} and {m} instances in an orthogonal direction with offsets {mdx},{mdy}.
Arbitrary repetition is specified using a set of deltas {dx},{dy} from the first instance
xxxxxxxxxxcadwriter.reference$writer={writer_id}name={cellname}pos={x},{y}[repeat=NM,{n},{ndx},{ndy},{m},{mdx},{mdy} | repeat=PTS,{dx0},{dy0}..{dxn},{dyn}][scale={scale}][angle={degrees}][flipy]
Write a cell reference to the current cell (with or without repetitions)
All co-ordinates are in file units
{writer_id} is name of a variable of type QisMCADWriterV2* associated with an open writer object
{cellname} is name of the cell to be referenced
pos is the location where the first instance of the boundary is to be placed
{scale} , {angle} and flipy if specified apply transformation to the reference
Repetitions (optional) can be specified in two forms:
Regular repetition is specified using the number of instances {n} in one direction with offsets {ndx},{ndy} and {m} instances in an orthogonal direction with offsets {mdx},{mdy}.
Arbitrary repetition is specified using a set of deltas {dx},{dy} from the first instance
xxxxxxxxxxcadwriter.end_cell $writer={writer_id}
Close a cell definition
{writer_id} is name of a variable of type QisMCADWriterV2* associated with an open writer object
xxxxxxxxxxcadwriter.close $writer={writer_id}
Close a GDSII/OASIS composer
{writer_id} is name of a variable of type QisMCADWriterV2* associated with the writer object to be closed
Requires the QisMRaster extension (qismraster64.dll/.so) to be installed, configured and loaded
Some commands require a valid license (14827) to run
Refer to qismraster.h for the corresponding C++ API
xxxxxxxxxxraster.create_rasterizer&rstr={rstr_id}$filedb={filedb_id}
Create a new rasterizer object
Requires 1 license of (14827) per call
Equivalent to QisMRaster::Create_rasterizer
{filedb_id} is name of a variable of type QisMFile* associated with the database linked to serve as the data source for the rasterizer
{rstr_id} is name of the variable of type QisMRasterizer* to be associated with the newly created rasterizer object
Every rasterizer object created with the command MUST be eventually destroyed using raster.destroy_rasterizer to avoid resource leaks
raster.destroy_rasterizer $rstr={rstr_id}
Destroy a rasterizer object
Releases 1 license of (14827) acquired at creation
Equivalent to QisMRaster::Destroy_rasterizer
xxxxxxxxxxraster.create_params¶ms={params_id}pixelsize={x}[,{y}][invert][dither={0.0_to_1.0}][right_to_left][bottom_to_top][est_buffer_cnt={n_vertices}][no_patterns][thrnum={n_threads}][fill={SOLID | OUTLINE}][format={TIF | BMP | VBMP | RAW}][nesting={level}][paths]
Create an object to hold rasterization parameters
Equivalent to QisMRaster::New_object("QisMRasterParams")
{params_id} represents name of a variable of type QisMRasterParams* to be associated with the newly created object
{x}[,{y}] represents the resolution for rasterization as size of a pixel along X and Y axes. If {y} is omitted, {x} is used along both axes
invert if used, reverses the image polarity to white (0) data pixels on a black (1) background
dither if used applies dithering to the data areas using 8x8 bayer matrix
right_to_left if used reverses the rasterization direction along X so that the first pixel of each row represents the max-x point in the data space. The last pixel represents the min-x point
bottom_to_top is used reverses the rasterization direction along Y so that the first row of pixels represent the min-y points in the data space. The last row represents the max-y points
{n_vertices} if used indicates the size of the polygon buffer when thrnum > 1 (multi-threaded rasterization). Default value is 1,000,000. If set to 0, multi-threading is disabled and each polygon is rasterized on-the-fly (same happens when {n_theads} == 1)
no_patterns if used, disables cellular pattern recognition. i.e repeating cell data within the image space is NOT used for faster rasterization
{n_threads} determines the number of threads used for rasterization. Default -- no. cpus
fill if used controls the fill mode. Default -- SOLID
format if used controls if the image is written to disk in the specified format after rasterization is complete. Default -- no writing to disk
{level} if > 0 specifies the nesting level at which data is to be rasterized. This does not do anything in paint&scratch and layer synthesis modes. Also, if set, cellular pattern recognition will be disabled
paths if specified allows PATH data to be rasterized separately instead of being converted to boundaries. This can be particulary useful for 0-width and 1-point paths
!ellipses if specified disables native rasterization for circle/ellipse constructs in paint&scratch data
Every object created using this command MUST be eventually destroyed using raster.destroy_params to avoid memory leak
raster.destroy_params $params={params_id}
Destroy an object that holds rasterization parameters
Equivalent to QisMRaster::Delete_object("QisMRasterParams")
{params_id} represents name of a variable of type QisMRasterParams* associated with the object to be destroyed
xxxxxxxxxxraster.window$rstr={rstr_id}outbase={output_dir_and_name}$params={params_id}{window={lx},{ly},{ux},{uy} | $windows={window_set_id}}[cell={cellname}][layers={layer_list}][grayscale={sample_rate},{bpp} | subsample]
Generate a monochrome bitmap from a view of the database
Equivalent to QisMRasterizer::Rasterize_window
{rstr_id} is name of the variable of type QisMRasterizer* associated with the a rasterizer object
{output_dir_and_name} is the base path of the output image (directory + file name). The extension will be automatically added based on the format (.tif, .bmp or .raw). See raster.create_params
{params_id} is name of a variable of type QisMRasterParams* containing the rasterization parameters. See raster.create_params
{lx},{ly},{ux},{uy} is the extents of the window (in file units) for which the image is to be generated. Alternately a set of windows can be specified where {window_set_id} is name of a variable of type QisMBoxSet* (See script.new_window_set) representing a set of windows to be rasterized with the same parameters
{cellname} if used is the name of the view cell. Default -- default top cell
{layer_list} if used is a comma-separated list of layer(s) or layer:datatype(s) to be rasterized in this image
If a format was specified, an image file will be created on disk at the specified base path
grayscale if specified generates a gray scale image with the specified sampling rate (uniform sampling) and bits per pixel (bpp). Only the following gray scale modes are supported based on the output format:
| Format | {sample_rate},{bits_per_px} |
|---|---|
TIF, TIF8, NONE | 2,2 2,4 2,8 4,4 4,8 8,8 |
BMP, VBMP | 2,4 2,8 4,4 4,8 8,8 |
xxxxxxxxxxraster.px_window$rstr={rstr_id}outbase={output_dir_and_name}$params={params_id}extents={px_lx},{px_ly},{width_bytes},{height_px}[cell={cellname}][layers={layer_list}][grayscale={sample_rate},{bpp}]
Rasterize a window whose co-ordinates are specified in pixel space
Equivalent to QisMRasterizerV4::Rasterize_px_window
{rstr_id} is name of the variable of type QisMRasterizer* associated with the a rasterizer object
{output_dir_and_name} is the base path of the output image (directory + file name). The extension will be automatically added based on the format (.tif, .bmp or .raw). See raster.create_params
{params_id} is a name of a variable of type QisMRasterParams* associated with the rasterization parameters
{px_llx},{px_lly} are the lower-left co-ordinates of the window in pixel space
{width_bytes} is the image width in bytes
{height_px} is the image height in pixels (or bytes)
{cellname} if specified is the view cell (default: default top cell of the file)
layers (if specified) is a comma-separated list of layers to be rasterized (default: ALL)
pixel_coordinate = round(file_coordinate/pixelsize)
If a format was specified, an image file will be created on disk at the specified base path
grayscale if specified generates a gray scale image. See raster.window for details
xxxxxxxxxxraster.polys$rstr={id}$bin={id}$params={id}[outbase={base_path}][window={minx},{miny},{maxx},{maxy}][repeat={x1},{y1}...{xn},{yn}]
Rasterize a set of polygons
$rstr points to a variable of type QisMRasterizer* representing the rasterizer object to be used
$bin points to a variable of type QisMBStore* representing the polygon set to be rasterized
$params points to a variable of type QisMRasterParams* representing the raster settings to be used
outbase if specified, is the base path (dir+filename) of the output file (per the output format). default: image
window if specified is the clipping window. default: all polygons are rasterized as-is
repeat if specified is a list of offsets (x,y) where the entire set is repeated. The first offset is implied to be 0,0 w.r.t lower-left of the polygon set
Makes use of Import_bstore and Rasterize_polygon_set
raster.overlay_polys $rstr={rstr_id} $bin={bin_id} [mode={PAINT | SCRATCH | DITHER}]
Overlay a set of polygon on an existing image (in the raster buffer)
Equivalent to QisMRasterizerV2::Overlay_polygon_set from qismraster.h
This command will only work after an image has been generated using raster.window or raster.synthesized
{rstr_id} is name of the variable of type QisMRasterizer* associated with the a rasterizer object
{bin_id} is name of the variable of type QisMBStore* associated with a set of polygons. It can be obtained using various other commands such as exploder.get_boundaries
mode if used specified the overlay mode. Default -- DITHER (overlay polygons with the same dither value as the underlying image). PAINT causes the overlay to be solid regardless of the dither value of the underlying image. SCRATCH causes the overlay to be etched out (cleared) from the underlying image
If a format was specified, an image file will be created on disk to overwrite the original image
xxxxxxxxxxraster.synthesized$rstr={rstr_id}outbase={output_dir_and_name}$params={params_id}{window={lx},{ly},{ux},{uy} | $windows={window_set_id}}[cell={cellname}]lsynth={lsynth_spec}[grayscale={sample_rate},{bpp}]
Generate monochrome bitmap from the result of layer synthesis
Equivalent to QisMRasterizer::Rasterize_window_synthesized
{rstr_id} is name of the variable of type QisMRasterizer* associated with the a rasterizer object
{output_dir_and_name} is the base path of the output image (directory + file name). The extension will be automatically added based on the format (.tif, .bmp or .raw). See raster.create_params
{params_id} is name of a variable of type QisMRasterParams* containing the rasterization parameters. See raster.create_params
{lx},{ly},{ux},{uy} is the extents of the window (in file units) for which the image is to be generated. Alternately a set of windows can be specified where {window_set_id} is name of a variable of type QisMBoxSet* (See script.new_window_set) representing a set of windows to be rasterized with the same parameters
{cellname} if used is the name of the view cell. Default -- default top cell
{lsynth_spec} specifies the expression to be used for layer synthesis. See here for syntax
If a format was specified, an image file will be created on disk at the specified base path
grayscale if specified generates a gray scale image. See raster.window for details
xxxxxxxxxxraster.create_pns_v2_spec$rstr={rstr_id}&spec={spec_id}[cell={name}]pxsize={x},{y}[window={lx},{ly},{ux},{uy}]raster.destroy_pns_v2_spec$rstr={rstr_id}$spec={spec_id}
Create (or destroy) a paint & scratch specification (v2-cell based) for rasterizing paint & scratch data from a cell-based paint and scratch database
Equivalent to QisMRasterizerV4::Create_paint_scratch_v2_spec / Destroy_paint_scratch_v2_spec
{rstr_id} is name of the variable of type QisMRasterizer* associated with the a rasterizer object
{spec_id} is name of a variable of type QisMRasterPSInfo_p to be associated with the newly created spec.
{name} (if specified) is the cell to be rasterized
{x},{y} is the resolution in pixel-size (file units)
{lx}..{uy} if specified is the window if interest (in file units)
Every spec. created this way MUST be eventually destroyed using raster.destroy_pns_v2_spec to avoid memory leaks
xxxxxxxxxxraster.window_pns_v2$rstr={rstr_id}outbase={output_dir_and_name}$params={params_id}{window={lx},{ly},{ux},{uy} | $windows={window_set_id}}[cell={cellname}][$spec={spec_id}][layers={layer_string}][grayscale={sample_rate},{bpp}]
Rasterize a window of a paint and scratch (v2-cell based) database
Equivalent to QisMRasterizerV4::Rasterize_window_paint_scratch_v2
{rstr_id} is name of the variable of type QisMRasterizer* associated with the a rasterizer object
{output_dir_and_name} is the name associated with this raster image. It will be used as the base path (directory + filename) if this image is written to disk as TIFF/BMP/RAW
{params_id} is a name of a variable of type QisMRasterParams* associated with the rasterization parameters
{lx} .. {uy} are the lower-left and upper-right co-ordinates of the window to be rasterized (in file units)
OR {window_set_id} is name of a variable of type QisMBoxSet* associated with the set of windows to be rasterized
{cellname} (if specified) is the name of the cell to be rasterized. (default: the deepest top cell in the file)
{spec_id} (if specified) is name of a variable of type QisMRasterPSInfo_p associated with the spec. (default: spec will be computed internally)
layers if specified is a comma-separated list of layer(s) or layer:datatype(s) to be rasterized. Default: ALL
If a format was specified, an image file will be created on disk at the specified base path
grayscale if specified generates a gray scale image. See raster.window for details
xxxxxxxxxxraster.format_image$img={id}outbase={base_path}format={TIF8 | TIF | BMP | VBMP | RAW}[thrnum={n}]
Create a formatted file on disk from the specified image buffer
{id} is the name of the rasterizer that holds the image buffer
{base_path} is the dir + filename of the output file. The extension will be added automatically depending on the format
{n} is the no. threads to be used for the formatting
Equivalent to Format_image
xxxxxxxxxxraster.queue_mt$filedb={filedb_id}$windows={window_set_id}$params={raster_params_id}basepath={image_base_path}[cell={cellname}][layers={layer_string}][thrnum_win={n_window_threads}][grayscale={sample_rate},{bpp}][p&s]
Use a multi-threaded queue to rasterize multiple windows in parallel
Equivalent to QisMRasterV3::Rasterize_win_queue_mt or QisMRasterV4::Raster_win_queue_mt_paint_scratch_v2
{filedb_id} is name of a variable of type QisMFile* associated with the database to be used
{window_set_id} is name associated with a variable of type QisMBoxSet* associated with a list of rectangular windows
{raster_params_id} is name associated with a variable of type QisMRasterParams* associated with the raster settings object
{image_base_path} is the base path (directory + base-name) of the images. A suffix of the format .{number} will be added where {number} is the position of the window in the list. The file extension will be automatically added based on the specified format
{cellname} if specified sets the view cell. Default view cell is the deepest top cell
{layer_string} if specified sets the view layers. Default all layers are ON
{n_window_threads} if specified sets the number of windows to be processed simultaneously. Each window thread will require 1 license of (14827) for rasterization. Default -- no. of processors in the system
p&s if specified uses the paint and scratch model instead of the default paint-only model
The number of threads to be user per image and other rasterization settings depends on the $params spec.
grayscale if specified generates a gray scale image. See raster.window for details
xxxxxxxxxxraster.large_disk_image$filedb={filedb_id}window={lx},{ly},{ux},{uy}$params={params_id}bufsz={mb}[overlap={px}][base={path}][cell={name}][layers={list}][thrnum={n}][alloc={rn}{rd}{sn}{sd}][grayscale={sample_rate},{bpp}][p&s]
Rasterize an image to disk that is too large to hold in a single buffer in memory
Equivalent to QisMRasterV4::Rasterize_large_disk_image or QisMRasterV4::Rasterize_large_disk_image_paint_scratch_v2
{filedb_id} is name of a variable of type QisMFile* associated with the database to be used
{lx}..{uy} are the extents of the window in file units
{params_id} is name of a variable of type QisMRasterParams* containing the rasterization parameters. See raster.create_params
{mb} is the buffer size to be used as a guide to control how much memory is allocated for rasterization (in Megabytes). See alloc= to understand how memory is allocated based on this parameter
overlap= if specified is the amount of overlapping rows between bands in pixels (default: 10)
base= if specified is the output dir+filename. (default: out)
cell= if specified is the view cell to be rasterized (default: deepest top cell)
layers= if specified is the comma-separated list of layers to be rasterized (default:ALL)
thrnum= if specified is the number of bands to be rasterized in parallel threads (default: no. cpus)
alloc= if specified is the allocation scheme to be used
Default: 2112
The allocation scheme is a 4-digit number of the format ABCD
The amount of memory to be allocated for rasterization is (A/B)*(bufsz_mb) while the amount of memory to be allocated for stitching the bands is (C/D)*(bufsz_mb)
The scheme can be used to find the optimal performance depending on whether the bottleneck is in the rasterization or the stitching
p&s if specified uses the paint and scratch model instead of the default paint-only model
If a format was specified, an image file will be created on disk at the specified base path
grayscale if specified generates a gray scale image. See raster.window for details
raster.get_dpi pixelsize={x}[,{y}] [units_m={units_in_meter}] [&var={var_id}]
raster.get_pixelsize dpi={x}[,{y}] [units_m={units_in_meter}] [&var={var_id}]
Convert resolution from pixel size to dots per inch and visa-versa
{x}[,{y}] is the image resolution in term of size of a pixel in file units (or dots per inch). Square pixel implied of {y} is omitted
units_m if specified is the data units in meters. Default: 1e-6 (um)
{var_id} if specified represents name of a string variable to be associated with the computed resolution in the format {res_x},{res_y}. It can be referenced subsequently in the script as (({var_id}))
xxxxxxxxxxraster.compute_buf_szsize={width}[,{height}]pixelsize={x}[,{y}]
Compute size of a raster image buffer based on the size of a pixel
{width},[{height}] are the dimensions of the data window in file units. Square tile implied if {height} is omitted
{x}[,{y}] is the image resolution in term of size of a pixel in file units. Square pixel implied of {y} is omitted
xxxxxxxxxxraster.compute_tile_szbuf_mb={buf_size_mb}pixelsize={x}[,{y}][roi={minx},{miny},{maxx},{maxy}][&width={width_id}][&height={height_id}]
Compute the size of a tile (window of data) based on the estimated buffer size in Mb (1024 * 1024 bytes)
{buf_sz_mb} is the estimated buffer size in Mb. to be filled with 1 bit pixels
{x}[,{y}] is the resolution in terms of size of a pixel along X and Y (in file units)
roi if specified determines the aspect ratio of the computed tile size. The aspect ratio of the tile is made to match that of the region of interest (in file units)
{widht_id} , {height_id} if specified represents names of string variables to be associated with the computed width and height respectively. These can then be referenced subsequently in the script as (({width_id})) and (({height_id})) respectively
QisMScript Commands to define and add rich annotations (texts, bitmaps) to CAD data
See qismloa.h for the corresponding C++ api
Some commands require a license (QISMLOA - 4250)
xxxxxxxxxxloa.create_ann_set&ann={id}units={meter}grid={meter}[ttf_dir={path}][font_dir={path}][stroke_weight={value}][line_spacing={value}][slant={value}][aspect={value}][circularize={1 | 0}][arcres={deg}][chord_error={arc_recov},{chord_err}][pixel_size_factor={value}][buffer_persist={1 | 0}][union={off | on | cutline | butting}][sort_size={value}][out_layer={lnum}:{dnum}][thrnum={value}]
Create a new annotation set and associates it with a script variable name
{id}of typeQisMLOAset*
Data units and grid MUST be specified in meter
ttf_dir represents the directory containing the font files. By default, the env. variable ACSLIB_TTF_FONTDIR represents that directory
font_dir represents the writeable directory to be used to create intermediate font files.If this is not used, the env. variable ACSLIB_FONTDIR MUST be set to such a directory. Otherwise, adding text annotations will fail
stroke_weight sets the stroke weight for polygons generated from fonts with path data. The width of stroked text is 1/stroke_weight the height of the text.
line_spacing sets the spacing (>0.001 user units) for annotation with multiple lines for text annotations
slant sets the slant in degrees for the text annotations
aspect sets the x/y aspect ratio for the text annotations
circularize is a toggle to smooth out fonts with arcs. This works in conjunction with arcres and chord error
arcres sets the arc resolution for a particular set. This setting will keep reconstituted arcs within a certain distance of the original arc. Works in conjunction with chord error
chord_error sets the arc recovery and chord error values
pixel_size_factor sets the pixel size conversion factor
buffer_persist toggles if bitmaps added via a buffer will have the image buffer persist during the execution or not
union sets the union mode for annotations
sort_size sets the size interval which sorting will be triggered for entries
out_layer sets the layer:datatype for the annotations in the output Set_to_stream
thrnum sets the no. of threads to be used during Set_to_stream
Requires and holds one license of QISMLOA (4250)
Every annotation set created this way MUST be explicitly destroyed using loa.destroy_ann_set
xxxxxxxxxxloa.destroy_ann_set $ann={id}
Destroys an annotation set represented by the script variable named
{id}of typeQisMLOAset*
Releases the QISMLOA (4250) license held by this object
C++ : QisMLOA::Delete_annotation_set
xxxxxxxxxxloa.add_ann_bitmap$ann={id}file={path}[translate={x},{y}][angle={deg},{x},{y}][mirror=x,{value}][mirror=y,{value}][invert={1 | 0}][scale={value}]
Add a bitmap based annotation item to the set
{id} is the name of a script variable of type QisMLOAset* representing the annotation set
The bitmap MUST be an Artwork RAW file at the specified {path}
translate if specified moves the text to the specified location. Default: 0,0
angle if specified rotates the text about a point {x},{y} by {deg} degrees. Default: no rotation
mirror if specified reflects the text about x or y located at the specified line. Default: no mirroring
invert if used (set to 1) inverts the rendered text polarity. Default: 0
scale is used to scale the annotation uniformly by the specified amount
All spatial values are file units
xxxxxxxxxxloa.add_ann_text$ann={id}text={str}font={name}height={value}[translate={x},{y}][angle={deg},{x},{y}][mirror=x,{value}][mirror=y,{value}][invert={1 | 0}][justify={left | center | right},{top | middle | bottom | baseline}][border={margin},{frame}]
Add a text string based annotation to the set
{id} is the name of a script variable of type QisMLOAset* representing the annotation set
{str} is a text string (single or multi-line)
font specifies the font file name used to render this text
height specifies the font height
translate if specified moves the text to the specified location. Default: 0,0
angle if specified rotates the text about a point {x},{y} by {deg} degrees. Default: no rotation
mirror if specified reflects the text about x or y located at the specified line. Default: no mirroring
invert if used (set to 1) inverts the rendered text polarity. Default: 0
justify if specified sets a horizontal and vertical justification. Default: left, top
border if specified adds a border of the specified thickness {frame} with a {margin} from the text. Default: no border
All spatial values are file units
xxxxxxxxxxloa.create_ann_set_from_file&ann={id}file={txt_file_path}units={meter}grid={meter}
Create an annotation set from a file in an internal Artwork format (SFGen)
&ann={id} specifies the name to be associated with the newly created annotation set
file={txt_file_path} specifies the path of the spec. file to be imported
units={meter} and grid={meter} specifies the data units and grid in meter
xxxxxxxxxxloaset.to_file$ann={id}file={path}units={m}grid={m}
Generate a GDSII file from the annotation set
{id} is the name of a script variable of type QisMLOAset* representing the annotation set
{path} is the path of the output GDSII
units={m} and grid={m} is the file units and grid in meter
xxxxxxxxxxloa.merge_ann_with_db$filedb={id}$ann={id}out={base_path}[viewcell={name}][top={name}][layers={str}][oasis | gdsii]
Merge annotation set with the specified db and create a new CAD file on disk
{id} is the name of a script variable of type QisMLOAset* representing the annotation set
{base_path} is the directory + filename of the output file. Extension .gds or .oas will be added based on the format
viewcell is the name of the cell from the source db to become the top cell in the output. Default: deepest top cell in the source
top is the name of the top cell in the output (if not to be the same as the viewcell which is the default)
layers specifies the layers of interest (comma-separated list of lnum(s) and/or lnum:dnum(s)). Default: "ALL"
oasis generates an OASIS file. gdsii is the default.
QisMScript Commands to compute 2D affine and bi-linear transformations on CAD data
See qismcorrx.h for the corresponding C++ api
Some commands require a license
Create a new affine transformation object
xxxxxxxxxxcorrx.create_affine&affine={id}{translate={dx},{dy}}*{scale={sx},{sy}}*{rotate={deg}}*{shear={shx},{shy}}*{flip=X|Y|XY}*{clear}*
&affine={id} specifies a name to be associated with the newly created object
translate=... if specified adds translation along X and Y in user-units
scale=... if specified adds scaling along X and Y
rotate=... if specified adds rotation in degrees
shear=... if specified adds shearing along X and Y
flip=... if specified adds reflection along X or Y or X and Y axes
clear resets the transformation matrix
The transformations can be specified in any order and any number of times for a cumulative effect
Every object created by this command MUST be destroyed using corrx.destroy_affine
Add transformations to the affine object
xxxxxxxxxxaffine.set$affine={id}{translate={dx},{dy}}*{scale={sx},{sy}}*{rotate={deg}}*{shear={shx},{shy}}*{flip=X|Y|XY}*{clear}*
$affine={id} specifies the name associated with an existing affine object
translate=... if specified adds translation along X and Y in user-units
scale=... if specified adds scaling along X and Y
rotate=... if specified adds rotation in degrees
shear=... if specified adds shearing along X and Y
flip=... if specified adds reflection along X or Y or X and Y axes
clear resets the transformation matrix
The transformations can be specified in any order and any number of times for a cumulative effect
Apply affine transformation to a set of points
xxxxxxxxxxaffine.transform$affine={id}xy={x},{y}[,{x},{y}]*[&var={name}]
$affine={id} specifies the name associated with an existing affine object
xy=... is the set of points to be transformed
&var={name} if specified creates a string variable called {name} that stores the transformed values in the format {x0},{y0}...{xn},{yn}
Apply affine transformation to a set of boundaries
xxxxxxxxxxaffine.transform_bstore$affine={id}$bin={id}[grid={value}]
$affine={id} specifies the name associated with an existing affine object
$bin={id} specifies the name associated with the boundary set to be transformed
[grid={value}] specifies the data grid in user-units (default: 1.0)
This command changes the boundary set to the transformed self
Destroy an affine object
xxxxxxxxxxcorrx.destroy_affine$affine={id}
$affine={id} specifies the name associated with an existing affine object to be destroyed
Create a settings object for use with corrx.create_corrx_obj
xxxxxxxxxxcorrx.create_opts&opts={opts_id}[thrnum={n_threads}][bufcount={poly_buffer_cnt}][source={layer_offset}]
&opts={opts_id} specifies a name to be associated with the newly created object
thrnum=... if specified is the no. threads to be used for certain operations (default: no. cpu(s))
bufcount=... if specified is the est. buffer size to hold polygons during certain operations (default: 65536)
source=... if specified allocates storage for source polygons at the specified layer += {layer_offset} for certain operations
Every object created by this command MUST be destroyed using corrx.destroy_opts
Destroy a settings object
xxxxxxxxxxcorrx.destroy_opts$opts={opts_id}
$opts={opts_id} specifies the name associated with an existing settings object
Create a new instance of the correction object
xxxxxxxxxxcorrx.create_corrx_obj&corrx={corrx_id}$filedb={filedb_id}[cell={cellname}]corrections={x},{y},{dx},{dy}{,{x},{y},{dx},{dy}}*
&corrx={corrx_id} specifies a name to be associated with the newly created object
$filedb={filedb_id} provides the name associated with the file database that serves as the data source
cell={cellname} if specified, sets the view cell for the source data. Default: default top cell of the file db
corrections={x},{y},{dx},{dy}{,{x},{y},{dx},{dy}}* is a list of points where the correction has been measured
Each point {x},{y} is associated with the correction offsets {dx},{dy} such that corrected_x = x + dx and so on
No. values in the list = 4 x no. points. All values in user-units
Every object created this way MUST be explicitly destroyed
Requires ONE license of QisMCorrX per call that is held until the object is destroyed
Destroy an existing correction object
xxxxxxxxxxcorrx.destroy_corrx_obj$corrx={corrx_id}
$corrx={corrx_id} provides the name associated with the object to be destroyed
Fetch and correct boundaries from a view of the database
xxxxxxxxxxcorrxobj.correct_view$corrx={corrx_id}window={lx},{ly},{ux},{uy}&bin={bin_id}[$opts={opts_id}][layers={layer_string}][domains={layer}]
$corrx={corrx_id} provides the name associated with the correction object to be used
window={lx},{ly},{ux},{uy} are the extents of the window to be queried
&bin={bin_id} specifies a name to be associated with a new container to hold the corrected boundaries
$opts={opts_id} if specified, provides the name of a settings object for optional control
layers={layer_string} if specified, provides a list of layers of interest. Default: "ALL"
domains={layer} if specified, adds diagnostic data to the container at {layer}:0
The container of boundaries created by this command MUST be explicitly destroyed
Correct a set of polygons
xxxxxxxxxxcorrxobj.correct_polys$corrx={corrx_id}$in={input_bin_id}&out={output_bin_id}[$opts={opts_id}][domains={layer}]
$corrx={corrx_id} provides the name associated with the correction object to be used
$in={input_bin_id} specifies a name associated with a container of boundaries to be corrected
&out={output_bin_id} specifies a name to be associated with a new container to hold the corrected boundaries
$opts={opts_id} if specified, provides the name of a settings object for optional control
domains={layer} if specified, adds diagnostic data to the container at {layer}:0
The container of boundaries created by this command MUST be explicitly destroyed
Destroy a container of corrected boundaries
xxxxxxxxxxcorrxobj.delete_store$bin={bin_id}
$bin={bin_id} is the name associated by the container to be destroyed that was created using appropriate commands of this module
Print the corrected extents of the entire space associated with this correction object
xxxxxxxxxxcorrxobj.print_corrected_extents$corrx={corrx_id}[&var={var_id}]
$corrx={corrx_id} provides the name associated with the correction object to be used
[&var={var_id}] if specified provides the name of a string variable to store the extents in the format {minx},{miny},{maxx},{maxy} user-units
Correct a window (manhattan rectangle)
xxxxxxxxxxcorrxobj.correct_window_extents$corrx={corrx_id}window={lx},{ly},{ux},{uy}[&var={var_id}]
$corrx={corrx_id} provides the name associated with the correction object to be used
window={lx},{ly},{ux},{uy} provides the extents to be corrected
First, the four corners of the input window are corrected and then a bounding box is computed around them
[&var={var_id}] if specified provides the name of a string variable to store the extents in the format {minx},{miny},{maxx},{maxy}
Correct a list of points
xxxxxxxxxxcorrxobj.correct$corrx={id}xy={x},{y}[,{x},{y}]*[&var={name}]
$corrx={corrx_id} provides the name associated with the correction object to be used
xy={x},{y}[,{x},{y}]* is a list of points (xy-pairs) to be corrected
[&var={name}] if specified, is the name of a string variable to store the corrected points in the format {x1},{y1},...{xn},{yn}
The no. points don't change
Correct a container of boundaries
xxxxxxxxxxcorrxobj.correct_bstore$corrx={id}$bin={id}
$corrx={corrx_id} provides the name associated with the correction object to be used
$bin={id} is the name associated with the container to correct
Unlike corrxobj.correct_polys, the container itself if modified to reflect the corrected polygons
Therefore no new allocation is required
Various attibutes of the container such as the no. polygons, no. vertices per polygon and layer/datatype associations don't change
Correct and rasterize a view of the database
xxxxxxxxxxcorrxobj.rasterize_window$corrx={corrx_id}$rstr={rstr_id}window={lx},{ly},{ux},{uy}$params={rstr_params_id}[layers={layer_string}]
$corrx={corrx_id} provides the name associated with the correction object to be used
$rstr={rstr_id} provides the name associated with the rasterizer to be used
window={lx},{ly},{ux},{uy} is the window (in user-units) of the database to be rasterized
$params={rstr_params_id} is name of the raster settings object
layers={layer_string} if specified, is the layers of interest
The final image extents will be computed based on corrxobj.correct_window_extents
Compute reflection as a set of correction points
xxxxxxxxxxcorrx.mirror_viewabout={X | Y | XY}$filedb={filedb_id}[cell={cellname}][&var={var_id}]
about={X | Y | XY} specifies the reflection mode. X implies flip Y, Y implies flip X
$filedb={filedb_id} provides the name of the database serving as the source
cell={cellname} if specified, set the view cell. Default: default top cell name
&var={var_id} if specified, is the name of the string variable to store the correction points in the format {x1},{y1},{dx1},{dy1},...{xn},{yn},{dxn},{dyn} (n points, four values per point). All values in user-units
The correction points returned by this command can be used to create a correction object
Compute shear as a set of correction points
xxxxxxxxxxcorrx.shear_viewedge={RIGHT | LEFT | TOP | BOTTOM}amount={x}$filedb={filedb_id}[cell={cellname}][&var={var_id}]
edge={RIGHT | LEFT | TOP | BOTTOM} specifies the edge to be sheared
amount={x} specifies the amount of shear in user-units
$filedb={filedb_id} provides the name of the database serving as the source
cell={cellname} if specified, set the view cell. Default: default top cell name
&var={var_id} if specified, is the name of the string variable to store the correction points in the format {x1},{y1},{dx1},{dy1},...{xn},{yn},{dxn},{dyn} (n points, four values per point). All values in user-units
The correction points returned by this command can be used to create a correction object
Compute rotation as a set of correction points
xxxxxxxxxxcorrx.rotate_viewangle={degrees}$filedb={filedb_id}[cell={cellname}][&var={var_id}]
angle={degrees} provides the rotation
$filedb={filedb_id} provides the name of the database serving as the source
cell={cellname} if specified, set the view cell. Default: default top cell name
&var={var_id} if specified, is the name of the string variable to store the correction points in the format {x1},{y1},{dx1},{dy1},...{xn},{yn},{dxn},{dyn} (n points, four values per point). All values in user-units
The correction points returned by this command can be used to create a correction object
Compute scaling as a set of correction points
xxxxxxxxxxcorrx.scale_viewscale={x}[,{y}]$filedb={filedb_id}[cell={cellname}][&var={var_id}]
scale={x}[,{y}] provides the scaling amount in X, Y
$filedb={filedb_id} provides the name of the database serving as the source
cell={cellname} if specified, set the view cell. Default: default top cell name
&var={var_id} if specified, is the name of the string variable to store the correction points in the format {x1},{y1},{dx1},{dy1},...{xn},{yn},{dxn},{dyn} (n points, four values per point). All values in user-units
The correction points returned by this command can be used to create a correction object
Generate a set of pseudo-random correction points based on a given set of constraints
xxxxxxxxxxcorrx.generate_ptsroi={minx},{miny},{maxx},{maxy}domains={nx},{ny}delta={dx},{dy}[&var={id}]
roi={minx},{miny},{maxx},{maxy} is the bounding box of the data space
domains={nx},{ny} partitions the data space into equal sized units (domains) along X and Y
delta={dx},{dy} provides the max. distortion along X and Y at any point in the data space. Computed pseudo-random distortion at any domain corner {cx},{cy} will be -{dx} <= {cx} <= {dx} along X and -{dy} <= {cy} <= {dy} along Y
&var={var_id} if specified, is the name of the string variable to store the correction points in the format {x1},{y1},{dx1},{dy1},...{xn},{yn},{dxn},{dyn} (n points, four values per point). All values in user-units
The correction points returned by this command can be used to create a correction object
QisMScript Commands to -- Create a spatial paint&scratch database from ODB++ files
See qismodbps.h for the corresponding C++ api
Some commands require a license (QISMODBPS -- 11502)
xxxxxxxxxxodbps.load&filedb={id}odb={path}step={name}layer={name}[workdir={path}][thrnum={n}][maxpts={n}][advanced={args}] [dbg][sizing={x},{y},{mils | inch | um | mm | cm}][unit={mils | inch | um | mm | cm}][format={whole},{fraction}][arcres={degrees}][arcsag={value}][rotate90={multiple}][scale={x}[,{y}]][reflect=x | y | xy]
Create/Destroy a paint&scratch spatial database from ODB++ files for use with other QisMLib APIs
&filedb= provides name to be associated with the newly created database (type QisMOdbPSFile*)
odb= provides the path of the source ODB++ file
step= provides a valid step name in the specified ODB++ data
layer= provides a valid layer name in the specified ODB++ data
workdir= (if provided) is the directory where temporary files will reside for the life of this database. If left empty/NULL, the current working directory will be used
thrnum= (if specified) provides the number of threads to be used for the corresponding operation. (Default or 0 implies no. cpu(s) in the system)
maxpts= (if specified) provides the max. no. vertices in any generated polygon. (Default 8190)
sizing= provides the amount of sizing (in the specified units) to be applied to the polygons generated. Sizing values MUST have be either both positive, both negative or both 0.0 (no sizing). (Default 0.0 / no sizing)
unit= (if specified) provides the unit for the newly created database. (Default um)
format= (if specified) provides the data resolution in terms of no. digits before and after the decimal point (Default depends on the unit)
"um" -- 5,3 (xxxxx.yyy)
"mm" -- 3,5
"cm" -- 2,6
"mils" -- 5,3
"inch" -- 2,6
arcres= (if specified) provides the arc resolution in degrees to determine how arcs are converted to polygon segments (Default is selected automatically based on the data)
arcsag= (if specified) provides the chord error to determine how arcs are converted to polygon segments (Default is selected automatically based on the data)
rotate90= if specified is an integer multiple of 90 degrees indicating the amount of rotation to be applied to the whole design (rotation about 0,0)
scale= if specified indicates the amount of scaling to be applied to the whole design (> 0.0)
reflect= if specified indicates the mirroring scheme -- x (flip X), y (flip Y) and xy (flip X & Y)
advanced= (if specified) provides advanced parameters for the translation of ODB++ data. Parameters with <space> in them MUST be enclosed in <double quote>. RESERVED for use only as advised by Artwork
dbg (if specified) enables troubleshooting the operation. If ON, temporary files are preserved even after unloading the database for inspection
Every database created using odbps.load MUST be eventually destroyed via an explicit call to odbps.unload to avoid resource leaks. There is no automatic garbage collection in QisMOdbPS
Adds one new variable named {id} of type QisMFile* for use with other qismlib commands
Adds two new string variables {id}.grid and {id}.units representing the data grid and units in meter
xxxxxxxxxxodbps.unload$filedb={id}
Destroy the database created using odbps.load
Also removes the variable named {id} (type QisMFile*)`
Also removes the string variables {id}.units and {id}.grid representing the data units and grid
QisMScript Commands to retrieve ODB file information about stepnames, layers, and structure
See qismodbscan.h for the corresponding C++ api
Some commands require a license (QISMODBSCAN - 11502)
odbscan.scaninput={fname}&results={id}[work_dir={path}][scan_mode={default | net_layers | board_only}][keep_tmp_files={on | off}][thrnum={digit}]
Create a new results objects {id} of type QisMOdbScanResults*
input represent the input ODB file to scan
work_dir represents the temporary working directory to use
scan_mode sets the type of filter to use when scanning the ODB file:
default does not apply any filter to the report
net_layers attempts to filter non-relevant meta-data layers
board_only only reports layers with the context of 'BOARD'
keep_tmp_files controls if the temporary working files will be cleaned up or kept
thrnum controls the maximum number of threads available to scan an ODB file
Every results object created this way MUST be explicitly destroyed using `odbscan.destroy_results
Requires ONE license of QisMOdbScan (11502) for each call to odbscan.scan
License is held by the 'results' object of until released with odbscan.destroy_results
xxxxxxxxxxodbscan.destroy_results$results={id}
Destroys the results object {id} of type QisMOdbScanResults*
Releases the QisMOdbScan (11502) license held by this object
xxxxxxxxxxodbscan.generate_report$results={id}[output={fname}]
Generate a report from the results object {id}
output represents a path and filename to save the report to disk
xxxxxxxxxxodbscan.print_step_tree$results={id}[step={name}][&var={string}]
Generate a graphical tree from the results object {id}
step sets the starting node for the graphical tree
Saves the graphical output to a string object with the name {string}
xxxxxxxxxxodbscan.print_default_top_step$results={id}[&var={string}]
Prints the default top step from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_top_steps$results={id}[&var={list}]
Prints the top step(s) from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_steps$results={id}[&var={list}]
Prints all the step names from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_step_tree_depthstep={name}$results={id}[&var={string}]
Prints the depth of a particular step from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_step_childrenstep={name}$results={id}[&var={list}]
Prints the immediate children of a particular step from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_step_all_descendantsstep={name}$results={id}[&var={list}]
Recursively prints all the children used by a particular step from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_step_layersstep={name}$results={id}[&var={list}]
Prints the layers explicitly used by a particular step from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_step_all_layersstep={name}$results={id}[&var={list}]
Recursively prints all the layers used by a particular step from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_layers$results={id}[&var={list}]
Prints all the layer names from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_layer_typelayer={name}$results={id}[&var={string}]
Prints the 'type' of a particular layer from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_layer_contextlayer={name}$results={id}[&var={string}]
Prints the 'context' of a particular layer from the results object {id}
Saves the output to a string object with the name {string}
xxxxxxxxxxodbscan.print_profile_extents$results={id}step={name}[&var={string}]
Prints the 'profile extents' of a particular step from the results object {id}
Saves the output to a string object with the name {string}
QisMScript commands to create a database from a Gerber (RS274X) file
xxxxxxxxxxgbrpsfile.print_meta $filedb={id}
Print meta-information about the Gerber from which a db was created
{id} is name associated with the db created from a Gerber file
xxxxxxxxxxgbrpsfile.save_gds $filedb={filedb_id} path={output_gds_path}
Save a GerberPS db as GDSII
{output_gds_path} is the path of the output GDSII file
{filedb_id} is name associated with the db created from a Gerber file
xxxxxxxxxxgbrps.unload $filedb={filedb_id}
Destroy a GerberPS db
{filedb_id} is name associated with the db created from a Gerber file
xxxxxxxxxxgbrps.load&filedb={filedb_id}path={gbr_file_path}workdir={wdir_path}[maxpts={num}][arcres={degrees}][arcsag={value}[{unit}]][thrnum={num}][unit=um][rotate={90x}][mirror=x|y|xy][scale={x}[,{y}]][sizing={x_uu},{y_uu}[{unit}]][nopaths][advanced={args}][advancedsz={args}][dbg]
Create a GerberPS (paint & scratch) db from a Gerber file
{filedb_id} is name to be associated with the newly created db
{gbr_file_path} is the path of a valid RS274X Gerber file
{wdir_path} if specified sets the working directory for the creation of temporary files. Default: CWD
maxpts sets the max. no. vertices in the output db. Default: 8190
arcres and arcsag if specified control the smoothness of arcs as they are converted to polygons. {unit} can be inch, mils, mm, cm, um or nm. Default: 45 deg and 1,um respectively
thrnum specifies the no. threads to be used for Gerber translation. Default: no. cpus in the system
unit=um if specified creates the db in um. Default: same units as the source db
rotate if specified rotates the design by the specified angle. MUST be a multiple of 90 degrees. Default: 0
mirror if specified reflects the design along X (flip x), Y (flip y) or XY (both x,y). Default: No reflection
scale if specified scales the design along X and optionally Y. If Y is omitted, {x} = {y}
sizing if specified applies positive or negative sizing along X and Y. The polarity (>0.0, <0.0 or ==0.0) of both values MUST be the same. {unit} can be inch, mils, mm, cm, um or nm.
nopaths if specified will convert the path data to boundaries during database creation. By default, path data will be available whenever possible
Sizing will force the conversion of paths to boundaries
advanced is a comma-separated list of args meant for the underlying Gerber engine. To be only used in consultation with the Artwork team
advancedsz is a comma-separated list of args meant for the underlying sizing engine. To be only used in consultation with the Artwork team
dbg if specified preserves the temporary files for troubleshooting. Default: Temp. files are deleted when the db is destroyed
This command also creates a variable of type QisMFile* with same name {filedb_id} so that the db can be used with other commands of the QisMLib scripting system. It also creates two other string variables of names {filedb_id}.grid and {filedb_id}.units set to the db grid and units in meters
xxxxxxxxxxsnputil.create_exploder&exploder={id}$filedb={id}[ipneg][ignlayers={list}]
Create a Paint&Scratch exploder object
&exploder is name of a variable of type QisMSnPExploder* to be associated with the newly created object
$filedb is name of a variable of type QisMFile* representing a Paint&Scratch db to serve as the data source
ipneg if specified, sets the polarity of the data to negative (data areas are scratched off)
ignlayers if specified is a comma-separated layers that only participate in extents calculation, not in the layout itself
Every object created by this commands MUST be destroyed using snputil.destroy_exploder
xxxxxxxxxxsnputil.destroy_exploder$exploder={id}
Destroy a Paint&Scratch exploder object
$exploder is name of a variable of type QisMSnPExploder* to be destroyed
xxxxxxxxxxsnpexploder.get_boundaries$exploder={id}&bin={id}window={lx},{ly},{ux},{uy}[layer={lnum},{dnum}]
Get flat (positive-equivalent) boundaries for the specified window of a Paint&Scratch db
$exploder is name of a variable of type QisMSnPExploder* to be used to run this query
&bin is name of a variable of type QisMBStore* to be associated with the set of boundaries extracted by this query
{lx}..{uy} is the view window (in file units)
layer={lnum},{dnum} if specified sets the layer for every polygon in the container
The set of boundaries created by the command MUST be destroyed using snpexploder.destroy_store
xxxxxxxxxxsnpexploder.destroy_store$exploder={id}$bin={id}
Destroy the set of polygons created by snpexploder.get_boundaries
$bin is name of a variable of type QisMBStore* to be associated with the set of boundaries to be destroyed
xxxxxxxxxxsnputil.unionize_to_file$filedb={id} out={path} $tiles={id}thrnum={nw},{np} [ipneg] [ignlayers={str}] [sliver={value},{units}][butting={overlap},{units}] [nostripes] [sizing={x},{y},{unit}] [dbg={name}][convex] [format=oasis] [top={new_name}] [lout={lnum},{dnum}]
Create a file on disk that is a positive-only (unionized) equivalent of the specified Paint&Scratch db
$filedb is name of a variable of type QisMFile* representing the Paint&Scratch db
out is the path of the output file on disk
$tiles is name of a variable of type QisMBoxSet* representing the set of windows (partitions) for multi-threaded processing
thrnum is the no. threads to use -- process {nw} windows in parallel and {np} threads per window
ipneg if specified reverses the data polarity (data areas are scratched off)
ignlayers if specified is a comma-separated list of layers that only participate in extents calculation
sliver if specified drops polygons smaller than a threshold {value} specified in {units} -- m | mm | um | nm | in | mil | dbu | uu
butting if specified outputs polygons with holes as butting polygons with the specified {overlap} in {units}
nostripes if specified removes partitioning lines
sizing if specified sizes the polygons along X and Y by the specified {x},{y} in {units}
dbg if specified generates diagnostic information with {name} as an identifier
convex if specified generates polygons that are convex in X and Y
format=oasis generates OASIS output if specified (default : GDSII)
top if specified sets the name of the top cell in the output (default : TOP)
lout if specified sets the layer {lnum} and datatype {dnum} of all output polygons (default : 0:0
Requires the QisMHExtract extension to be installed and loaded
Some commands may require a license (11083)
See qismhextract.h for the corresponding C++ API
xxxxxxxxxxhextract.create_extractor&extractor={extractor_id}$filedb={filedb_id}
Create an instance of the extractor object
Equivalent to QisMHExtract::Create_extractor in qismhextract.h
Requires ONE license of (11083) per call
{extractor_id} is name of a variable to be associated with the newly created object
{filedb_id} is name of a variable associated with the database to be used as the source for extraction
Every object created this way MUST be destroyed eventually to avoid memory/resource leaks
xxxxxxxxxxhextract.destroy_extractor$extractor={extractor_id}
Destroy an instance of the extractor object
{extractor_id} is name of variable associated with the extractor to be destroyed
Releases ONE license of (11083) acquired during hextract.create_extractor
xxxxxxxxxxhextract.create_opts&opts={opts_id}[flatten][text][nopaths][sliver={sliver_value},{min_area}][top={top_cell_name}][onlyrefs={cellname_or_regex}][droprefs={ALL | CHILD},{cellname_or_regex}][txy={dx},{dy}][scale={scale}][angle={degrees}] [flipy][prename={cellname_prefex}][postname={cellname_suffix}][layeroffx={l_offx},{d_offx}][clip={OFF | DROP_POLYS | DROP_DATA}]
Create an instance of the extraction settings object
Equivalent to QisMHExtract::New_object("QisMHExtractOpts") in qismhextract.h
Every settings object MUST be eventually destroyed using hextract.destroy_opts
{opts_id} is name of variable of to be associated with the newly created object
flatten if used, removes all hierarchy and generates a flat output (boundaries, paths, texts). Default: hierarchical output
text if used extracts TEXT elements. (default: no TEXTs)
nopaths if used converts paths to boundaries. Default: Paths are extracted as-is (except for the ones that are clipped)
{sliver_value} and {min_area} represent the sliver and min. area for polygons to be extracted. Default: all polygons are extracted no matter how small.
{top_cell_name} if used sets the name of the top cell in the output file. Default: same name as the view cell (being extracted)
onlyrefs if used extracts references only to those cells whose names match the specified list of name(s) or regular expression(s) and are immediate children of the cell being extracted. Any child reference whose cell name does not match the specified filter will be dropped. Default: all applicable references are extracted
droprefs if used drops references only to those cells whose names match the specified list of name(s) or regular expression(s). If ALL is specified, all matching references are dropped regardless of the nesting level. If CHILD is specified, only the matching references that are immediate children of the view cell are dropped. Default: all applicable references are extracted
txy if used translates the output by the specified offset {dx},{dy} in file units. Default: 0.0,0.0
scale if used scales the output. Default: 1.0
angle if used rotates the output with the specified amount in degrees. Default: 0.0
{cellname_prefix} adds a pre-fix to names of all the extracted cells. Default: No prefix
{cellname_suffix} adds a suffix to names of all the extracted cells. Default: No suffix
layeroffx offsets all extracted layers by the specified layer number {l_offx} and datatype number {d_offx}. Default: 0,0
clip if used sets the clipping policy for elements partially crossing the clipping regions as follows:
OFF
Boundaries, Paths, Texts and References are extracted as-is
DROP_DATA
Boundaries, Paths and References are dropped
Texts whose insertion is outside the clipping regions are dropped
DROP_POLYS
Boundaries and Paths are dropped
References are ignored and their immediate children (contents) are processed instead
Texts whose insertion is outside the clipping regions are dropped
Default
Boundaries are clipped
Paths are converted to boundaries and clipped
References are ignored and their immediate children (contents) are processed instead
Texts whose insertion is outside the clipping regions are dropped
xxxxxxxxxxhextract.destroy_opts$opts={opts_id}
Destroy an instance of the extraction settings object
Equivalent to QisMHExtract::Delete_object("QisMHExtractOpts") in qismhextract.h
{opts_id} is name of variable associated with the object to be destroyed
xxxxxxxxxxhextract.create_regions®ions={regions_id}[complement]
Create a container of regions of interest
Equivalent to QisMHExtract::New_object("QisMHextractRegions") in qismhextract.h
{regions_id} is name of variable to be associated with the newly created container
complement if specified creates a complement of the specified regions w.r.t the extents of the view cell. Default: off
Every container MUST be destroyed eventually using hextract.destroy_regions to avoid memory leak
xxxxxxxxxxhextractregions.add$regions={regions_id}[$boxes={boxset_id}][$bstore={grid_m},{units_m},{bstore_id}]{box={minx},{miny},{maxx},{maxy}}*{poly={x1},{y1}..{xn},{yn},{x1},{y1}}*{circle={x},{y},{radius},{arcres},{arcsag}}*
Add one or more regions to the container
{regions_id} is name of variable associated with the container to store regions of interest
{boxset_id} if specified is name of variable associated with a set of boxes to be imported into this container
$bstore if specified represents a set of polygons to be added to this container. {bstore_id} is name of a variable associated with the set of polygons to be added. {grid_m} and {units_m} are the grid and units in meters associated with the polygon set (or the file db)
box if specified (one or more times) represents a single box to be added to this container. {minx}..{maxy} are it's extents in file units
poly if specified (one or more times) represents a single closed polygon to be added to this container. {x1},{y1}... are the co-ordinates in file units
circle if specified (one or more times) represents a single circular polygon to be added to this container. {x},{y} (the center) and {radius} are in file units.
xxxxxxxxxxhextract.extract_regions$regions={regions_id}
Destroy a container of regions of interest
Equivalent to QisMHExtract::Delete_object("QisMHextractRegions") in qismhextract.h
{regions_id} is name of variable to be associated with the container to be destroyed
xxxxxxxxxxhextractor.extract_to_writer$extractor={extractor_id}$writer={cadwriter_id}[cell={cellname}][layers={layer_string}][$regions={regions_id}][$opts={opts_id}][cnvunits]
Send extracted vectors of a view of the source database to an open cad file writer
Uses QisMHExtractor::Extract from qismhextract.h
{extractor_id} is name of a variable associated with the hierarchy extractor
{cadwriter_id} is name of a variable associated with a writer open for composing a GDSII/OASIS file
{cellname} if specified sets the view cell (to be extracted). Default: deepest top cell
{layer_string} is a comma-separated list of layers to be extracted
{regions_id} if specified is name of a variable associated with the container of regions of interest. Default: Extents of the view cell
{opts_id} if specified is name of a variable associated with the extraction settings
cnvunits if specified scales the extracted data appropriately to match the grid, units of the output file so that the dimension of the extracted data (in meters) remains unchanged. This option is only used if the grid of the source data does not match the grid of the output
xxxxxxxxxxhextractor.extract_to_file$extractor={extractor_id}out={output_base_path}units={grid_m},{units_m}[format={GDS | OAS}][cell={cellname}][layers={layer_string}][$regions={regions_id}][$opts={opts_id}]
Extract view of the source database to a GDSII/OASIS file on disk
Uses QisMHExtractor::Extract along with QisMHExtractor::Create_file_writer from qismhextract.h
{extractor_id} is name of a variable associated with the hierarchy extractor
{output_base_path} is the base path (directory + filename) where the output file will be created. Extension will be added automatically depending on the format
{grid_m} and {units_m} are the output grid and units respectively in meters
format if specified sets the output file format (default: GDS)
{cellname} if specified sets the view cell (to be extracted). Default: deepest top cell
{layer_string} is a comma-separated list of layers to be extracted
{regions_id} if specified is name of a variable associated with the container of regions of interest. Default: Extents of the view cell
{opts_id} if specified is name of a variable associated with the extraction settings
xxxxxxxxxxhextract.create_db&hextdb={hextdb_id}$filedb={filedb_id}[cell={cellname}][layers={layer_string}][$regions={regions_id}][$opts={opts_id}][dbg][workdir={path}][format=GDS|OAS][layermap={layermap_str}][notext]
Create a new database from an extraction of a current database
{hextdb_id} is name of variable associated with the database object to be created
{filedb_id} is name of variable associated with the database object to serve as the source for extraction
{cellname} if specified is the view cell to extract from (default: top cell with the deepest hierarchy or the largest extents)
{layer_string} if specified is a comma-separated list of {layer}[:{datatype}] representing the layers to be extracted (default: all layers)
{regions_id} if specified is name of variable associated with a set of clipping regions (default: no clipping)
{opts_id} if specified is name of variable associated with the extraction settings (default: extraction with default parameters)
dbg if specified preserves the temporary working files even after the database is destroyed for the purpose of debugging/diagnostics (default: temporary working files are removed upon database deletion)
workdir if specified sets the location for creating temporary working files (default: current working directory)
format if specified controls the underlying format of the database (default: OAS)
layermap if specified applies a layer map to the new database being created. See lib.load_file for details. (default: all extracted layers are loaded as-is)
notext if specified ignores TEXT elements from the extracted data
Requires ONE license of (11083) for this operation. The license is release once the extraction is complete
Every database created this way MUST be destroyed using hextract.destroy_db to avoid resource leaks
xxxxxxxxxxhextractfile.save_as$hextdb={hextdb_id}path={output_file_path}
Make a copy of the underlying extracted file
{hextdb_id} is name of variable associated with the database object to be created
{output_file_path} is the path where the copy is to be made
xxxxxxxxxxhextract.destroy_db$hextdb={hextdb_id}
Destroy an instance of an extracted database
Equivalent to QisMHExtractV2::Destroy_db from qismhextract.h
{hextdb_id} is name of variable associated with the database object to be destroyed
xxxxxxxxxxhextract.select_dbu{dbu={grid_m},{units_m}}+&grid_m={grid_id}&units_m={units_id}
Select the finest dbu (grid, units) from a list of dbu(s)
This can be used to merge multiple files with different grid/units
grid_m is the source grid in meters. units_m is the source units in meters. e.g a um file with nm resolution has a dbu of 1e-9,1e-6
{grid_id} is name of a string variable to store the grid value of the selection. {units_m} is name of a string variable to store the units of the selection
Requires the QisMRTCR extension to be installed and loaded (qismrtcr64.dll/so)
Select commands may require a valid license
See qismrtcr.h for the corresponding API
xxxxxxxxxxrtcr.create_opts &opts={opts_id} [layers={layer_filter}] [diskload] [keeptmp]
Create a new instance of the basic RTCR options object (QisMRTCROpts*)
Equivalent to QisMRTCR::Create_object("QisMRTCROpts") in qismrtcr.h
{opts_id} represents name of the variable of type QisMRTCROpts* associated with the newly created object
{layer_filter} if used, can be a comma-separated list of layers w/o datatypes OR a layer map
e.g "1,2:2,3" for a simple list of layers of interest
e.g "ALL-NULL,1-100,2:2-200:0,3-300:3" for a layer map that re-maps 1:* to 100:*, 2:2 to 200:0 and merges all datatypes of layer 3 to 300:3
diskload if used creates the new database in 'disk' mode to reduce the memory footprint
keeptmp if used will retain the temporary files used by an RTCR job in it's job directory after the job has been closed. This can be useful for troubleshooting and diagnosis
Every object created using this command MUST be destroyed by the script using rtcr.destroy_opts to avoid resource leak
xxxxxxxxxxrtcr.destroy_opts $opts={opts_id}
Destroy an instance of the basic RTCR options object
Equivalent to QisMRTCR::Destroy_object("QisMRTCROpts") in qismrtcr.h
{opts_id} represents name of the variable of type QisMRTCROpts* associated with the object to be destroyed
xxxxxxxxxxrtcr.create_corrections&corr={corr_id}{{point={x},{y},{dx},{dy}}+4x} | file={corr_file}[tolerance={value}]
Create an instance of the RTCR corrections object
Equivalent to QisMRTCR::Create_object("QisMRTCRCorrections") in qismrtcr.h
{corr_id} represents name of the variable of type QisMRTCRCorrections* associated with the newly created object
{x},{y},{dx},{dy} represents one correction point. Each domain contains exactly FOUR such points. Specify one or more domains using a series of point= arguments
{corr_file} represents the path of a correction text file to be imported. See QisMRTCRCorrections in qismrtcr.h for file syntax
{value} represents the amount of tolerance to be applied for correcting cell references
Every object created using this command MUST be destroyed by the script using rtcr.destroy_corrections to avoid resource leak
xxxxxxxxxxrtcr.destroy_corrections $corr={corr_id}
Destroy an instance of the RTCR corrections object
Equivalent to QisMRTCR::Destroy_object("QisMRTCRCorrections") in qismrtcr.h
{corr_id} represents name of the variable of type QisMRTCRCorrections* associated with the object to be destroyed
xxxxxxxxxxrtcr.create_annotations &ann={ann_id} [file={ann_file}]
Create an instance of the RTCR annotations object
Equivalent to QisMRTCR::Create_object("QisMRTCRAnnotations") in qismrtcr.h
{ann_id} represents name of the variable of type QisMRTCRAnnotations* associated with the newly created object
{ann_file} if specified, represents the path of a annotation text file to be imported. See QisMRTCRAnnotations in qismrtcr.h for file syntax
Every object created using this command MUST be destroyed by the script using rtcr.destroy_annotations to avoid resource leak
xxxxxxxxxxrtcrannotations.add$ann={id}text={string}{pos={x},{y},{height} | box={lx},{ly},{ux},{uy}}units_m={value}[angle={degrees}][margin={mm_value}][inverse][frame][backwards]
Add one annotation item to a list of annotations. This command can be called multiple times to add more annotations to a single job
{id} is name of a variable of type QisMRTCRAnnotations* associated with the annotations settings object obtained via rtcr.create_annotations
{string} is the annotation text
{x},{y},{height} are the position and size of the annotation in file units. The width is calculated based on the text string and the height. Alternately, the annotation can be fit into a fixed size bounding box with min-max extents {lx} .. {uy}. One of these two options MUST be specified
units_m is the file units in meters. e.g um = 1e-6
angle is the rotation to be applied to the text. In box mode, the rotated text is made to fit inside the specified box. The box itself is not rotated
margin is the amount of margin (in mm) to be applied between the text and the outer frame when frame is enabled
frame if specified places the text inside a frame
inverse if specified inverts the polarity of the text polygons (the text is subtracted from a base rectangle)
backwards if specified reverses the appearance of the text so that it reads backwards
xxxxxxxxxxrtcr.destroy_annotations $ann={ann_id}
Destroy an instance of the RTCR annotations object
Equivalent to QisMRTCR::Destroy_object("QisMRTCRAnnotations") in qismrtcr.h
{ann_id} represents name of the variable of type QisMRTCRAnnotations* associated with the object to be destroyed
xxxxxxxxxxrtcr.setup_job&job={job_id}outdir={output_dir}input={input_gdsii}[$opts={opts_id}][$corr={corr_id}][$ann={ann_id}]
Create a new RTCR job and a new database associated with it
Equivalent to QisMRTCR::Setup_job in qismrtcr.h
Requires 1 license of (1303) which will be released during rtcr.end_job
RTCR job represents a database created from a micron (um) GDSII file optionally with corrections and annotations
{job_id} represents name of the variable of type QisMRTCRJob* associated with the newly created job
{output_dir} is the path of an existing directory to be used as a working directory for this job
{input_gdsii} is the path of the source GDSII file. It MUST has micron units. Usually, it would be generated by SFGen
{opts_id} if used, represents name of the variable of type QisMRTCROpts* associated with the RTCR basic options object created using rtcr.create_opts
{corr_id} if used, represents name of the variable of type QisMRTCRCorrections* associated with RTCR corrections object created using rtcr.create_corrections
{ann_id} if used, represents name of the variable of type QisMRTCRAnnotations* associated with RTCR annotations object created using rtcr.create_annotations
Every job created using this command MUST be eventually destroyed using rtcr.end_job to avoid resource leaks
This command also creates a new script variable of type QisMFile* with the name {job_id} so that it can be used wherever QisMFile can be used. DO NOT use this variable with lib.unload_file as the associated database will be destroyed automatically during rtcr.end_job
xxxxxxxxxxrtcr.end_job $job={job_id}
Destroy an RTCR job and the database associated with it
Equivalent to QisMRTCR::End_job in qismrtcr.h
Releases 1 license of (1303) acquired during rtcr.setup_job
{job_id} represents name of the variable of type QisMRTCRJob* associated with the job to be destroyed
xxxxxxxxxxrtcrjob.create_rasterizer$job={job_id}&rstr={rasterizer_id}{pixelsize={x}[,{y}] | dpi={x}[|{y}]}[cell={cellname}][layers={std_layers}][dlayers={dither_layers}][dither={0.0-1.0}][thrnum={num_threads}]{correct={x},{y},{dx},{dy}}*
Create a new rasterizer object associated with a particular RTCR job
Equivalent to QisMRTCRJob::Create_rasterizer in qismrtcr.h
Requires 1 license of (14827) per call which will be released during rtcrjob.destroy_rasterizer
{job_id} represents name of the variable of type QisMRTCRJob* associated with the newly created job
{rasterizer_id} represents name of the variable of type QisMRTCRasterizer* associated with the newly created rasterizer object
{x},{y} represents the desired image resolution in DPI (dots per inch) or as a pixel size (in file units). The {y} value is optional. If not used, the resolution is uniform along X and Y axes
{cellname} is name of the view cell. If not used, the default top cell is used as the view cell
{std_layers} is a comma-separated list of layers representing the layers to be rasterized in each image. If not used, ALL layers in the database as rasterized in each image. e.g layers=1,2:2,3:0,3:3,4
{dither_layers} is a comma-separated list of layers to be rasterized with the specified dither value. If not used, dithering is disabled for the subsequent images. Dithering is applied using a 8x8 bayer matrix
{num_threads} is the number of threads to be used to generate each raster image
Use one or more correct={x},{y},{dx},{dy} to apply second-level corrections to any image generated using this rasterizer object. By default, no additional corrections are applied to rasterized images. Applying second-level corrections requires 1 license of (11093) in addition to (14827) per rasterizer object
Each rasterizer created using this command MUST be destroyed eventually using rtcrjob.destroy_rasterizer to avoid resource leaks
xxxxxxxxxxrtcrjob.get_raster_image$job={job_id}$rstr={rasterizer_id}$windows={window_set_id}[invert][right_to_left][shiftpx={INS_B | INS_W | REM}][pxrows={px}[,{px}]*][pxcols={px}[,{px}*]][format={TIF | BMP | RAW}]
Generate one or more raster images
Equivalent to multiple calls to QisMRTCRJob::Get_raster_image in qismrtcr.h
{job_id} represents name of the variable of type QisMRTCRJob* associated with the job in question
{rasterizer_id} represents name of the variable of type QisMRTCRasterizer* associated with the rasterizer to used for generating these images
{window_set_id} represents name of the variable of type QisMBoxSet* associated with a set of windows created using script.new_window_set
invert is used, inverts the image polarity to white-on-black i.e bit=0 for data, bit=1 for background
right_to_left rasterizes the image from right to left i.e min-x of the data appears on the right hand size of the raster image
shiftpx, pxrows and/or pxcols is used, apply row/column shifting to each image. {px} represents a row/column number in pixel space (MUST be within the bounds of the image). pixel 0,0 appears at the top-left corner of the image. INS_B inserts a black line (white line in invert mode), INS_W inserts a white line (black line in invert mode) and REM removes a line. The image size does not change in either case
format is used writes the image to disk in TIFF, BMP or RAW format. The job directory is used as the output directory. The name of each file is derived from the associated window-name (see script.new_window_set)
xxxxxxxxxxrtcr.destroy_rasterizer $job={job_id} $rstr={rasterizer_id}
Destroy a rasterizer object
Equivalent to QisMRTCRJob::Destroy_rasterizer in qismrtcr.h
Releases 1 license of (14827) acquired during rtcrjob.create_rasterizer
{rasterizer_id} represents name of the variable of type QisMRTCRasterizer* associated with the rasterizer to be destroyed
{job_id} represents name of the variable of type QisMRTCRJob* associated with the job that created the rasterizer in question
Commands to use the QisMMRtcr extension within the QisMLib scripting system
See qismmrtcr.h for the corresponding C++ api
Some commands require a license
xxxxxxxxxxmrtcr.scan_infostr={path};{minx},{miny},{maxx},{maxy}&file={var}&roi={var}
Split a string formatted as {file_path};{minx},{miny},{maxx},{maxy} into two components -- {file_path} and ROI {minx},..{maxy}
&file= and &roi= if specified will create new string variables where the component values will be stored
This is just a utility commands to be used while reading a text file containing a list of scans, each composed of the active file path and ROI
xxxxxxxxxxmrtcr.new_opts&opts={id}[cell={P | A},{name}][layers={P | A},{str}][!corrx={P | A}][{+ | -}corrx={P | A}][thrnum={n}][resolution={x},{y},{m|cm|mm|um|nm|in|mils|dpi|dbu}][format={path},{TIF | BMP | RAW | TIF8}][gds={path}[,{src}]][dither={value}][nopaths={P | A}][anylic]
Create an object to hold optional control parameters
&opts={id} specifies name of a variable (type QisMMRtcrOpts) to be associated with the newly created object
cell= specifies the view cell for either P (passive) or A (active) db(s). By default, the deepest top cell is used
layers= specifies view layers for either P (passive) or A (active) db(s). By default, all layers are used
!corrx= disables corrections for P (passive) or A (active) db(s). By default, corrections are enabled for both
+corrx= enables all-point corrections for P (passive) or A (active) db(s). -corrx= enables 1-pt corrections for either db(s). By default, +corrx=P and -corrx=A
thrnum={n} specifies the no. threads (also no. licenses) to be used
resolution= specifies the image resolution along X and Y followed by the units. If resolution is not specified, polygons will not be rasterized
format= if used creates an image file on disk at the specified {path} in one of the specified file formats
gds= if used creates a GDSII file on disk at the specified {path} containing polygons that were rasterized (after corrections). If {src} is specified, it represents the datatype where the original polygons will also be written
dither= specifies the dithering value (default 1.0)
nopaths= converts all paths to boundaries before processing for P (passive) or A (active) databases
invert if specified reverses the image polarity (makes 0/white data on 1/black background)
anylic if specified will enable working with any number of licenses available even if less than requested. By default, any less than requested number of licenses is considered an error
Every such object MUST be eventually destroyed using mrtcr.delete_opts to avoid memory leak
xxxxxxxxxxmrtcr.delete_opts$opts={id}
Destroy the control parameters object associated with the variable {id} (type QisMMRtcrOpts)
xxxxxxxxxxmrtcr.new_image&img={id}roi={minx}..{maxy}$opts={id}units={units_m},{grid_m} [anylic]
Create a buffer to hold a raster image (image object)
roi (must be valid) are the extents of the data (from both db(s)) to be processed. I.e roi is the extents of the image in data space
This is only used as a guide to determine the buffer size. The actual data extents will be used during mrtcr.generate_scan
For use with multiple scans, specify an ROI that's big enough to hold a little more than the largest of such scans
$opts={id} is name of a variable (type QisMMRtcrOpts) representing additional (optional) control parameters
{units_m} and {grid_m} are the source data units and grid in meters (e.g 1e-6 and 1e-9 for a um file with nm resolution)
On success, creates a new variable (type QisMMRtcrImage) named {id} of &img associated with a new empty image object
The newly created image will be blank and ready to use. Therefore, there is no need to do a separate mrtcr.clear_image on this image before the first use
This image object MUST be eventually destroyed using mrtcr.delete_image to avoid resource leaks
Requires a license. See license policy
xxxxxxxxxxmrtcr.delete_image$img={id}
Destroy an image object represented by the variable named {id} (type QisMMRtcrImage) and free any associated licenses
xxxxxxxxxxmrtcr.clear_image$img={id}[thrnum={nt}][invert]
Reset all the pixels in the image buffer
$img={id} is the name of a variable (type QisMMRtcrImage) associated with the image to be cleared
thrnum={nt} is the no. threads (>0) to be used
invert if specified sets the buffer pixels to 1s
xxxxxxxxxxmrtcr.generate_scan$passive={id}roi={minx}..{maxy}*img={id}[$active={id}][$opts={id}][corrx={x},{y},{dx},{dy}..]
Generate a monochrome raster image (1bpp) by collecting polygons from a passive db, optionally an active db; with corrections if specified
$passive={id} is the name of a variable (type QisMFile*) associated with the db representing passive data
roi (must be valid) are the extents of the data (from both db(s)) to be processed. I.e roi is the extents of the image in data space
$active={id} (if specified) is the name of a variable (type QisMFile*) associated with the db representing active data
Both passive and active db(s) MUST have the same units and grid
*img={id} is the name of a variable (type QisMMRtcrImage) to be associated with the raster image on successful return. At the time of the call, if {id} already references an existing raster image, the existing image buffer will be re-used (as long as it big enough to hold the new image)
corrx={x},{y},{dx},{dy} (if specified) is a set of measured points for applying bi-linear distortion to the source data. Each correction point is represented by FOUR numbers -- {x},{y},{dx},{dy} where {dx},{dy} is the measured distortion at {x},{y}. These values are in the user units (data space)
$opts={id} is name of a variable (type QisMMRtcrOpts) to additional (optional) control parameters
On success, *img={id} will point to the raster image object. That object can be re-used for the next scan. Eventually, it MUST be explicitly destroyed using mrtcr.delete_image to avoid resource leak. Note --
If the re-used buffer is not enough to hold the new image, it will be automatically destroyed and a new buffer will be allocated internally in it's place
This way, *img={id} will always point to the output raster image whether or not the buffer was re-used
This operation will require a license ONLY IF an existing image buffer was not specified. I.e {id} of *img does not exist at the time of this call
Requires the QisMLayerSynth extension to be installed and loaded (qismlayersynth64.dll/so)
Select commands may require a valid license
See qismlayersynth.h for the corresponding API
xxxxxxxxxxlsynth.new_synthesizer&lsynth={lsynth_id}$filedb={filedb_id}
Create a new layer synthesizer object
Equivalent to QisMLayerSynth::New_synthesizer in qismlayersynth.h
Requires 1 license of (11069) which will be release during lsynth.delete_synthesizer
{lsynth_id} represents name of a variable of type QisMLayerSynthObject* associated with the object to be created
{filedb_id} represents name of a variable of type QisMFile* associated with the file database linked with the synthesizer
Every object created using this command MUST be eventually destroyed using lsynth.delete_synthesizer to avoid resource leaks
xxxxxxxxxxlsynth.delete_synthesizer$lsynth={lsynth_id}
Destroy a layer synthesizer object
Releases 1 license of (11069) acquired during lsynth.new_synthesizer
{lsynth_id} represents name of a variable of type QisMLayerSynthObject* associated with the object to be destroyed
xxxxxxxxxxlsynth.synthesize_layers$lsynth={lsynth_id}&bin={bin_id}spec={lsynth_spec}[cell={cellname}][clip][window={minx},{miny},{maxx},{maxy}][butting={overlap}][nostripes][thrnum={n_threads}]
Synthesize layers based on an expression
Equivalent to QisMLayerSynthObject::Synthesize_layers in qismlayersynth.h
{lsynth_id} represents name of a variable of type QisMLayerSynthObject* associated with the synthesizer object
{bin_id} represents name of a variable of type QisMBStore* associated with the set of boundaries to be created to store the synthesized polygons
{lsynth_spec} is the layer synthesis expression
{cellname} if used indicates the view cell. Default -- default top cell
clip is used causes the output to be clipped to the specified window. Default -- no clipping
{minx}..{maxy} if used represents a window of interest with min/max extents in file units. Default -- extents of the view cell
butting if used causes output polygons with holes to be broken up into butting polygons (along X) with the specified {overlap} value. Default -- Polygons with holes have cutlines
nostripes if used, causes partitioning lines in the output to be merged. Default -- off
{n_threads} if used indicates the number of threads to be used for performing boolean operations. Default -- 0 (automatic based on no. cpus in the system)
The newly created {bin_id} MUST be eventually destroyed using lsynth.delete_store to avoid resource leaks
xxxxxxxxxxlsynth.delete_store$bin={bin_id}
Delete a container of boundaries created only by lsynth.synthesize_layers
{bin_id} represents name of a variable of type QisMBStore* associated with the container to be destroyed
Requires the QisMBoolFiles extension to be installed and loaded
Some commands may require licenses
Refer to qismboolfiles.h for C++ API
xxxxxxxxxxtwofiles.xor$filedb={id1},{id2}[cell={cell1},{cell2}][layers={layers_string}][limit={count}][thrnum={n_tiles},{n_per_tile}][gds={output_gds_path}][sliver={value}[,{unit}]][complexity={n_vertices_per_tile}][partial=TILES,{pct_tiles}][partial=LAYERS,{pct_layers}][margin={extents_error}[,{unit}]][xorinput={l},{d}]
Compare two databases by performing a layer-wise geometric XOR between their polygons by breaking up the region of interest into smaller tiles
{id1},{id2} are names of variables of type QisMFile* associated with the databases to be compared
{cell1},{cell2} if specified are the names of the view cells of each database to be compared (default: deepest/largest top cell of each db)
{layers_string} if specified is a comma-separated list of layers of interest. Only the specified layers will be compared (default: ALL layers from the first db). Each layer of interest MUST be present in both databases
{count} if specified terminates the comparison as soon as the computed differences exceed the specified limit. If {count} == 0, the comparison computes all the differences (default: 1)
{n_tiles} represents the no. threads to be created to process one tile of the view at a time (default: no. processors in the system). {n_per_tile} is the no. threads per tile to perform XOR (default: 1)
{output_gds_path} if specified writes the computed XOR to a GDSII file (default: no GDSII output)
sliver if specified removes XOR results smaller than the specified value. {unit} if specified indicates the units of the value supplied. Allowed units are m, cm, mm, um, nm, in, mils, dbu. Default units : source file units
{n_vertices_per_tile} if specified determines how the per-layer space is broken up into tiles for parallel computation (default: 5000). The larger the value of {n_vertices_per_tile}, the more intensive the XOR computation is and should be matched with an appropriate no. threads ({n_per_tile})
{pct_tiles} if specified limits the no. tiles to be compared per layer to the specified percentage of the total no. of tiles allocated to that layer. The selection of tiles is random and therefore this can be used to do a quicker test (default: 100 -- full test)
{pct_layers} if specified limits the no. layers to be compared to the specified percentage of the layers of interest (or all layers). The selection of layers is random and therefore this can be used to do a quicker test (default: 100 -- all of the specified/available layers)
margin if specified allows the home view extents of the two files to have a difference up to the specified value. {unit} if specified indicates the units of the value supplied. Allowed units are m, cm, mm, um, nm, in, mils, dbu. Default units : source file units
xorinput if specified writes the source data at a new layer and datatype that is an offset from the source by {l} and {d}
Requires the QisMClipExtract extension be installed and loaded (qismclipextract64.dll/so)
Select commands may require a valid license
See qismclipextract.h for the C++ API
xxxxxxxxxxclip.extract_images$filedb={filedb_id}$windows={window_set_id}resolution={PXS | DPI | DBU},{x}[,{y}][layers={layer_list}][cell={cellname}][thrnum={n_window_threads}][invert][dither={0.0_to_1.0}][right_to_left][bottom_to_top][format={TIF | BMP | RAW | VBMP}]
Extract clips (windows) of monochrome bitmaps to TIFF/BMP/RAW files on disk
Requires N licenses of (31209) where N = {n_window_threads} i.e no. clips to extract in parallel
{filedb_id} represents name of the variable of type QisMFile* associated with the source database
{window_set_id} represents name of a variable of type QisMBoxSet* associated with a set of windows created using script.new_window_set. It MUST contain at least one window
{layer_list} if specified is a comma-separated list of layer(s) or layer:datatype(s) representing the layers to be extracted. Default: ALL layers are extracted
{cellname} if specified represents the view cell. Default: default top cell is used
{n_window_threads} represents the no. clips to be extracted in parallel
invert if used reverses the image polarity to white (data) on black (background)
dither if used applies dithering using a 8x8 bayer matrix
right_to_left if used reverses the bits each row along X. i.e first pixel of a row will represent max-x instead of min-x.
bottom_to_top is used reverses the order of rows of pixels so that the first row represents the min-y position in data space instead of max-y
format determines the output file format. TIF is compressed (packbits). BMP and RAW are uncompressed. VBMP implied bottom-to-top BMP where the BiHeight parameter of the BITMAPINFOHEADER is flipped
resolution can be specified as size of a pixel in file units PXS, or dots/pixels per inch DPI, or no. file grids per pixel DBU. A pixel can be rectangular ( {x} != {y}) or square. If {y} is omitted, the {x} value is used to form a square pixel
All the clips are created in the current working directory
xxxxxxxxxxclip.extract_polygons$filedb={filedb_id}$windows={window_set_id}[layers={layer_list}][cell={cellname}][thrnum={n_window_threads},{n_threads_per_window}][per_layer_union][clip][maxvert={max_vertices_per_polygon}][format={GDS | OAS}][butting={overlap}]
Extract clips (windows) of polygons to GDSII or OASIS files on disk (flat polygonal data)
Requires N licenses of (31209) where N = {n_window_threads} i.e no. clips to extract in parallel
{filedb_id} represents name of the variable of type QisMFile* associated with the source database
{window_set_id} represents name of a variable of type QisMBoxSet* associated with a set of windows created using script.new_window_set. It MUST contain at least one window
{layer_list} if specified is a comma-separated list of layer(s) or layer:datatype(s) representing the layers to be extracted. Default: ALL layers are extracted
{cellname} if specified represents the view cell. Default: default top cell is used
{n_window_thread} represents the no. clips to be extracted in parallel. {n_threads_per_window} represents the no. threads to be used per clip for processing (boolean operations)
per_layer_union if specified unionizes all polygons by layer. Default: extract polygons as-is
clip if specified clips the data along the window extents. Default: no clipping
{max_vertices_per_polygon} if specified may result in large polygons being broken up into smaller ones. Default: max. 8190 vertices/polygon
format represents the output file format. If not specified, clips are extracted but not written to disk
butting if specified results in unionized polygons with holes represented as pairs of butting polygons where {overlap} is the amount of overlap along X. This only works if per_layer_union is used
All the clips are created in the current working directory
xxxxxxxxxxclip.extract_lsynth$filedb={filedb_id}$windows={window_set_id}lsynth={lsynth_spec}[cell={cellname}][thrnum={n_window_threads},{n_threads_per_window}][clip][maxvert={max_vertices_per_polygon}][format={GDS | OAS}][butting={overlap}]
Extract clips (windows) of polygons created from layer synthesis to GDSII or OASIS files on disk (flat polygonal data)
Requires N licenses of (31209) where N = {n_window_threads} i.e no. clips to extract in parallel
{filedb_id} represents name of the variable of type QisMFile* associated with the source database
{window_set_id} represents name of a variable of type QisMBoxSet* associated with a set of windows created using script.new_window_set. It MUST contain at least one window
{lsynth_spec} is the expression for layer synthesis. The detailed syntax can be found here
{cellname} if specified represents the view cell. Default: default top cell is used
{n_window_thread} represents the no. clips to be extracted in parallel. {n_threads_per_window} represents the no. threads to be used per clip for processing (boolean operations)
clip if specified clips the data along the window extents. Default: no clipping
{max_vertices_per_polygon} if specified may result in large polygons being broken up into smaller ones. Default: max. 8190 vertices/polygon
format represents the output file format. If not specified, clips are extracted but not written to disk
butting if specified results in unionized polygons with holes represented as pairs of butting polygons where {overlap} is the amount of overlap along X. This only works if per_layer_union is used
All the clips are created in the current working directory