[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
xxxxxxxxxx
usage.required {description}
Report mandatory paramters for using a script (one per line)
{description}
is the appropriate description of the parameter
xxxxxxxxxx
usage.option [{description}]
Report optional paramters for using a script (one per line)
{description}
is the appropriate description of the parameter
xxxxxxxxxx
usage.info {description}
Report any additional information relevant to a script
{description}
is the appropriate information
xxxxxxxxxx
sleep
interval={interval_s}
Sleep for the specified interval in seconds
xxxxxxxxxx
assert
key={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} }
xxxxxxxxxx
askif
key={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
xxxxxxxxxx
system {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
xxxxxxxxxx
commands
[{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
xxxxxxxxxx
exit
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
xxxxxxxxxx
script.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
xxxxxxxxxx
script.end_procedure
Close the definition of the procedure in question
xxxxxxxxxx
script.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
xxxxxxxxxx
script.push {token}+
Add one or more tokens to a list of tokens that will be passed to every subsequent command
xxxxxxxxxx
script.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
xxxxxxxxxx
script.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
xxxxxxxxxx
script.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
xxxxxxxxxx
script.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}))
xxxxxxxxxx
script.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}))
xxxxxxxxxx
script.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
xxxxxxxxxx
script.substr
in={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}))
xxxxxxxxxx
script.tokenize
in={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}))
xxxxxxxxxx
script.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
xxxxxxxxxx
script.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
xxxxxxxxxx
script.convert
from={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)
xxxxxxxxxx
script.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
xxxxxxxxxx
script.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
xxxxxxxxxx
script.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
xxxxxxxxxx
script.file_name
path={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
xxxxxxxxxx
script.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
xxxxxxxxxx
script.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
xxxxxxxxxx
script.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}
xxxxxxxxxx
script.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
xxxxxxxxxx
script.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
xxxxxxxxxx
lib.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
xxxxxxxxxx
lib.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
xxxxxxxxxx
file.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
xxxxxxxxxx
file.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
xxxxxxxxxx
file.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}))
xxxxxxxxxx
file.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}))
xxxxxxxxxx
file.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}))
xxxxxxxxxx
file.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}
xxxxxxxxxx
file.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}))
xxxxxxxxxx
file.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: ,
xxxxxxxxxx
file.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
xxxxxxxxxx
file.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
xxxxxxxxxx
file.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
xxxxxxxxxx
exploder.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)
xxxxxxxxxx
exploder.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
xxxxxxxxxx
exploder.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
xxxxxxxxxx
exploder.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
xxxxxxxxxx
exploder.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
xxxxxxxxxx
exploder.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
xxxxxxxxxx
store.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
xxxxxxxxxx
store.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"
xxxxxxxxxx
store.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
xxxxxxxxxx
draw.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
xxxxxxxxxx
bool.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
xxxxxxxxxx
bool.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
xxxxxxxxxx
bool.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
xxxxxxxxxx
bool.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
xxxxxxxxxx
boolsettings.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
xxxxxxxxxx
boolinst.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
xxxxxxxxxx
boolinst.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
xxxxxxxxxx
boolinst.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
xxxxxxxxxx
explcounter.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
xxxxxxxxxx
explcounter.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
xxxxxxxxxx
explcounter.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
xxxxxxxxxx
probe.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
xxxxxxxxxx
cadwriter.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
xxxxxxxxxx
cadwriter.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
xxxxxxxxxx
cadwriter.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
)
xxxxxxxxxx
cadwriter.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
)
xxxxxxxxxx
cadwriter.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
xxxxxxxxxx
cadwriter.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
xxxxxxxxxx
cadwriter.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
xxxxxxxxxx
cadwriter.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
xxxxxxxxxx
cadwriter.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
xxxxxxxxxx
cadwriter.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
xxxxxxxxxx
cadwriter.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
xxxxxxxxxx
raster.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
xxxxxxxxxx
raster.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
xxxxxxxxxx
raster.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 |
xxxxxxxxxx
raster.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
xxxxxxxxxx
raster.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
xxxxxxxxxx
raster.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
xxxxxxxxxx
raster.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
xxxxxxxxxx
raster.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
xxxxxxxxxx
raster.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
xxxxxxxxxx
raster.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
xxxxxxxxxx
raster.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}))
xxxxxxxxxx
raster.compute_buf_sz
size={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
xxxxxxxxxx
raster.compute_tile_sz
buf_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)
xxxxxxxxxx
loa.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
xxxxxxxxxx
loa.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
xxxxxxxxxx
loa.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
xxxxxxxxxx
loa.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
xxxxxxxxxx
loa.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
xxxxxxxxxx
loaset.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
xxxxxxxxxx
loa.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
xxxxxxxxxx
corrx.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
xxxxxxxxxx
affine.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
xxxxxxxxxx
affine.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
xxxxxxxxxx
affine.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
xxxxxxxxxx
corrx.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
xxxxxxxxxx
corrx.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
xxxxxxxxxx
corrx.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
xxxxxxxxxx
corrx.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
xxxxxxxxxx
corrx.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
xxxxxxxxxx
corrxobj.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
xxxxxxxxxx
corrxobj.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
xxxxxxxxxx
corrxobj.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
xxxxxxxxxx
corrxobj.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)
xxxxxxxxxx
corrxobj.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
xxxxxxxxxx
corrxobj.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
xxxxxxxxxx
corrxobj.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
xxxxxxxxxx
corrxobj.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
xxxxxxxxxx
corrx.mirror_view
about={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
xxxxxxxxxx
corrx.shear_view
edge={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
xxxxxxxxxx
corrx.rotate_view
angle={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
xxxxxxxxxx
corrx.scale_view
scale={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
xxxxxxxxxx
corrx.generate_pts
roi={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)
xxxxxxxxxx
odbps.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
xxxxxxxxxx
odbps.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.scan
input={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
xxxxxxxxxx
odbscan.destroy_results
$results={id}
Destroys the results object {id}
of type QisMOdbScanResults*
Releases the QisMOdbScan (11502) license held by this object
xxxxxxxxxx
odbscan.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
xxxxxxxxxx
odbscan.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}
xxxxxxxxxx
odbscan.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}
xxxxxxxxxx
odbscan.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}
xxxxxxxxxx
odbscan.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}
xxxxxxxxxx
odbscan.print_step_tree_depth
step={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}
xxxxxxxxxx
odbscan.print_step_children
step={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}
xxxxxxxxxx
odbscan.print_step_all_descendants
step={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}
xxxxxxxxxx
odbscan.print_step_layers
step={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}
xxxxxxxxxx
odbscan.print_step_all_layers
step={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}
xxxxxxxxxx
odbscan.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}
xxxxxxxxxx
odbscan.print_layer_type
layer={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}
xxxxxxxxxx
odbscan.print_layer_context
layer={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}
xxxxxxxxxx
odbscan.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
xxxxxxxxxx
gbrpsfile.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
xxxxxxxxxx
gbrpsfile.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
xxxxxxxxxx
gbrps.unload $filedb={filedb_id}
Destroy a GerberPS db
{filedb_id}
is name associated with the db created from a Gerber file
xxxxxxxxxx
gbrps.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
xxxxxxxxxx
snputil.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
xxxxxxxxxx
snputil.destroy_exploder
$exploder={id}
Destroy a Paint&Scratch exploder object
$exploder
is name of a variable of type QisMSnPExploder*
to be destroyed
xxxxxxxxxx
snpexploder.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
xxxxxxxxxx
snpexploder.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
xxxxxxxxxx
snputil.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
xxxxxxxxxx
hextract.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
xxxxxxxxxx
hextract.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
xxxxxxxxxx
hextract.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
xxxxxxxxxx
hextract.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
xxxxxxxxxx
hextract.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
xxxxxxxxxx
hextractregions.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.
xxxxxxxxxx
hextract.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
xxxxxxxxxx
hextractor.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
xxxxxxxxxx
hextractor.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
xxxxxxxxxx
hextract.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
xxxxxxxxxx
hextractfile.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
xxxxxxxxxx
hextract.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
xxxxxxxxxx
hextract.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
xxxxxxxxxx
rtcr.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
xxxxxxxxxx
rtcr.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
xxxxxxxxxx
rtcr.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
xxxxxxxxxx
rtcr.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
xxxxxxxxxx
rtcr.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
xxxxxxxxxx
rtcrannotations.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
xxxxxxxxxx
rtcr.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
xxxxxxxxxx
rtcr.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
xxxxxxxxxx
rtcr.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
xxxxxxxxxx
rtcrjob.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
xxxxxxxxxx
rtcrjob.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)
xxxxxxxxxx
rtcr.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
xxxxxxxxxx
mrtcr.scan_info
str={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
xxxxxxxxxx
mrtcr.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
xxxxxxxxxx
mrtcr.delete_opts
$opts={id}
Destroy the control parameters object associated with the variable {id}
(type QisMMRtcrOpts)
xxxxxxxxxx
mrtcr.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
xxxxxxxxxx
mrtcr.delete_image
$img={id}
Destroy an image object represented by the variable named {id}
(type QisMMRtcrImage) and free any associated licenses
xxxxxxxxxx
mrtcr.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
xxxxxxxxxx
mrtcr.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
xxxxxxxxxx
lsynth.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
xxxxxxxxxx
lsynth.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
xxxxxxxxxx
lsynth.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
xxxxxxxxxx
lsynth.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
xxxxxxxxxx
twofiles.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
xxxxxxxxxx
clip.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
xxxxxxxxxx
clip.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
xxxxxxxxxx
clip.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