[Artwork] / [QisMLib] / [Programmer's Corner]
Command-line program to extract in parallel threads, lots of tiny clips of data from a GDSII/OASIS/DBLOAD design to GDSII/OASIS/TIFF/BMP/RAW files on disk
ClipExtractCommand-line referenceRequired+input:{input_file_path}
+outdir:{output_directory}
WINDOW-SPEC-window:LLUR:{name}:{llx},{lly},{urx},{ury}
-window:LLWH:{name}:{llx},{lly},{width},{height}
-window:CWH:{name}:{cx},{cy},{width},{height}
@window:LLUR:{name}:{window_list_file}
@window:LLWH:{name}:{window_list_file}
@window:CWH:{name}:{window_list_file}
-tile:RXY:{name}:{roi_llx},{roi_lly},{roi_urx},{roi_ury}:{nx},{ny}[:{i},{j}]*
-tile:RWH:{name}:{roi_llx},{roi_lly},{roi_urx},{roi_ury}:{width},{height}[:{i},{j}]*
-tile:CWH:{name}:{width},{height}:{cx},{cy}[:{cx},{cy}]*
FORMAT+format:IMAGE
+format:TIFF
+format:BMP
+format:VBMP
+format:RAW
+format:GDSII
+format:OASIS
+format:POLYS
OptionalFILE-OPTIONS-layers:{layer_list}
-layermap:{layer-mapping}
-cell:{cell}
-loadfromdisk
FORMAT-OPTIONS for raster images-pixelsize:{size_x}[,{size_y}]
-dither:{0.0-TO-1.0}
-invert
-right-to-left
-bottom-to-top
FORMAT-OPTIONS for extracting polygons-union
-clip
-maxvert:{max_vert_per_polygon}
-butting:{overlap}
-lsynth:{layer_synth_spec}
MISC-OPTIONS-thrnum:{n_window_threads},{n_threads_per_window}
-log:{log_path}] or -log+:{log_path}
-silent
Layer Synthesis Spec. Linear syntaxPostfix syntax
clipextract +input:{input_file_path} +outdir:{output_directory} [FILE-OPTIONS]
{WINDOW-SPEC} {FORMAT} [FORMAT-OPTIONS] [MISC-OPTIONS]
+input:{input_file_path}
+outdir:{output_directory}
-window:LLUR:{name}:{llx},{lly},{urx},{ury}
{name}
is used to identify the window and the file generated thereof{output_directory} + {name} + {extension}
-window:LLWH:{name}:{llx},{lly},{width},{height}
{name}
is used to identify the window and the file generated thereof{output_directory} + {name} + {extension}
-window:CWH:{name}:{cx},{cy},{width},{height}
{name}
is used to identify the window and the file generated thereof{output_directory} + {name} + {extension}
@window:LLUR:{name}:{window_list_file}
{llx},{lly},{urx},{ury}
(in file units){name}
is used to identify the windows and the files generated thereof{output_directory} + {name} + {line_number} + {extension}
@window:LLWH:{name}:{window_list_file}
{width},{height}
(in file units) to be used
for all windows#
are treated as comments{name}
is used to identify the windows and the files generated thereof{output_directory} + {name} + {line_number} + {extension}
@window:CWH:{name}:{window_list_file}
{window_list_file}
{width},{height}
(in file units) to be used for
all windows#
are treated as comments{output_directory} + {name} + {line_number} + {extension}
-tile:RXY:{name}:{roi_llx},{roi_lly},{roi_urx},{roi_ury}:{nx},{ny}[:{i},{j}]*
{nx}
x {ny}
same sized tiles from a region defined by it's lower
left and upper right co-ordinates (in file units){nx}
and
1 <= J <= {ny}
)are specified, only those tiles will be extracted. Otherwise,
all tiles will be extracted{output_directory} + {name} + {I}.{J} + {extension}
-tile:RWH:{name}:{roi_llx},{roi_lly},{roi_urx},{roi_ury}:{width},{height}[:{i},{j}]*
{width} x {height}
same sized tiles from a region defined by it's
lower left and upper right co-ordinates (in file units){i},{j}
tile positions (1 <= I <= Num. tiles in X
and 1 <= J <= Num. tiles in Y)are specified, only those tiles will be
extracted. Otherwise, all tiles will be extracted{output_directory} + {name} + {I}.{J} + {extension}
-tile:CWH:{name}:{width},{height}:{cx},{cy}[:{cx},{cy}]*
{width} x {height}
sized tiles centered at one or more co-ordinates{output_directory} + {name} + {counter} + {extension}
+format:IMAGE
+format:TIFF
+format:BMP
+format:VBMP
+format:RAW
+format:GDSII
+format:OASIS
+format:POLYS
-layers:{layer_list}
-layers:1,2:2,3,4:4,4:5
layer:datatype
that does not match this specification will be filtered out-layermap:
-layermap:{layer-mapping}
Specify a layer mapping for extraction (vectors)
xxxxxxxxxx
{layer-mapping} := [ALL-NULL][,{from}-{to}]+
where {from},{to} := {layer}[:{datatype}]
e.g -layermap:1-3 (move layers 1:* to 3:*, all other layers extracted as-is)
-layermap:1-3:0 (move layers 1:* to 3:0, all other layers extracted as-is)
-layermap:1:0-3:0 (move 1:0 to 3:0, all other layers extracted as-is)
-layermap:ALL-NULL,1-3 (move layers 1:* to 3:*, drop all other layers)
-layermap:ALL-NULL,1-1 (drop all layers except 1:*) (same as -layers:1)
Overrides preceding -layers:
-cell:{cell}
-loadfromdisk
-pixelsize:{size_x}[,{size_y}]
-dither:{0.0-TO-1.0}
-invert
-right-to-left
-bottom-to-top
-union
-clip
-maxvert:{max_vert_per_polygon}
-butting:{overlap}
-lsynth:{layer_synth_spec}
-thrnum:{n_window_threads},{n_threads_per_window}
-log:{log_path}] or -log+:{log_path}
-silent
xxxxxxxxxx
+ {layersynth-spec} := {target}[;{target}]* (One or more targets)
+ {target} := {target-layer}:{target-dttp}={op-layer}[:{op-dttp}] [{op}{op-layer}[:{op-dttp}]]*
(Generate a layer:dttp from operations on one or more layers or layer:dttps)
+ {op} := '+' (union) or '-' (difference) or '&' (intersection) or '^' (xor) or ',' (aggregation/OR-without-union) or '|' (aggregation/OR-without-union)
Examples:
100:0=2,5:0,7
(aggregate polygons on 2:* 5:0 and 7:* into a new layer 100:0)
100:0=2+5:0+7
(unionize polygons on 2:* 5:0 and 7:* into a new layer 100:0)
100:0=2+5:0-7
(unionize polygons on 2:* 5:0 and then subtract 7:* to create a
new layer 100:0)
100:0=2,5:0-7
(aggregate polygons on 2:* 5:0 and then subtract 7:* to create a
new layer 100:0)
100:0=2^5
(Compute XOR between 2:* and 5:* as 100:0)
100:0=2&5
(Compute INTERSECTION between 2:* and 5:* as 100:0)
100:0=2+5;200:0=100:0-5;300:0=200^5;400:0=300&5
(Create multiple synthesized
layers from multiple operations between layers)
xxxxxxxxxx
+ {layersynth-spec} := @{target}[{target}]*
+ {target} := {operations}{result}
+ {operations} := list of postfix operations resulting in ONE output. E.g:
"L" (single layer all datatypes (A:*)) (0 <= L < 65535)
"L:D" (single layer:datatype) (0 <= L,D < 65535)
"A B +" (UNIONIZE A and B) (A,B can be of type L or L:D)
"A B -" (SUBTRACT B from A)
"A A ^" (XOR of A and B)
"A B &" (INTERSECTION of A and B)
"A B |" (Combine A and B without union)
"A C =" (Assing A to C where C is of type L:D)
"A B - C D & +" (same as (A - B) + (C & D))
"A B - C & D +" (same as ((A - B) & C) + D)
+ Not allowed:
"A B - C D &" (because it results in TWO outputs A - B and C & D)
+ {result} := Can be one of the following
"R ~" (Emit the result as a new layer R where R is of type L:D, 0 <= L,D < 65535)
"R *" (Unionize the result and emit it as a new layer R)
Example:
"@1 2:2 - 3:3 4 | & 0:0 ~"
"@1 2 ^ 100:0 = 0:0 ~ 3 4 | 200:0 = 0:1 * 100:0 200:0 & 0:3 ~"