A QisMLib extension to create a paint & scratch spatial database from ODB++ files for further processing with other QisMLib extensions
QisMOdbPS ExtensionQisMOdbPS C++ API (qismodbps.h)QisMOdbPSNotifyVersion control (QisMOdbPSNotify)On_qismodb_progress (BETA)QisMOdbPSOptsEnum ReflectEnum Type (QisMOdbPSOpts)PRM_THRNUMPRM_MAXPTS PRM_SIZING_XYPRM_SIZINGARGS PRM_ADVANCED PRM_DBG PRM_UNIT PRM_FORMAT PRM_ARCRES PRM_ARCSAG PRM_ROTATE90 PRM_REFLECT PRM_SCALE Version control (QisMOdbPSOpts)Set_paramGet_paramReset (QisMOdbPSOpts)Copy (QisMOdbPSOpts)QisMOdbPSFileVersion control (QisMOdbPSFile)File_dbGet_error_msg (QisMOdbPSFile)Get_error_tag (QisMOdbPSFile)Get_error_context (QisMOdbPSFile)Save_to_gdsiiQisMOdbPSVersion control (QisMOdbPS)Get_error_msg (QisMOdbPS)Get_error_tag (QisMOdbPS)Get_error_context (QisMOdbPS)New_objectDelete_objectLoad_odbUnload_odbQisMOdbPS Commandsodbps.loadodbps.unloadQisMOdbPS Licensing (API)QisMOdbPS Licensing (Script)QisMOdbPS Version History qismodbps dll/so v1.3.1 06-2025qismodbps dll/so v1.3 09-2024qismodbps dll/so v1.2 11-2023qismodbps dll/so v1.1 05-2023qismodbps dll/so v1.0 02-2023
Set the environment var
ACS_VERBOSE_CH=odbpsto see verbose messaging related to QisMOdbPS in the QisMLib log file (QisMLog)
Receive notifications from supported QisMOdbPS operations
A QisMOdbPS client defines a custom class derived from this and overrides the relevant methods to receive notifications
class QisMOdbPSNotify { .. };
Cast to a pointer of another version in the class hierarchy (base/derived)
Get the latest version number. Version numbers start at 1 and are reflected in the class name using the suffix V<number>. E.g <baseclass>V<version>
The topmost base class is version 1 (V1 implied)
The cast returns NULL if a version number is not recognized/implemented
xxxxxxxxxxvirtual const char* QisMOdbPSNotify_name(const int version) const = 0;virtual void* QisMOdbPSNotify_cast(const int version) = 0;virtual const void* QisMOdbPSNotify_cast(const int version) const = 0;virtual int QisMOdbPSNotify_latest_version() const = 0;Recieve progress updates as a new database is being created from ODB++ files
Return 0 to continue with the operation. Otherwise, return an integer code that represents the reason for abrupt termination
msg is a human-readable string that describes the current state of the operation
xxxxxxxxxxvirtual int On_qismodb_progress(const char* msg) { return 0; }Provides controls for creating a database from ODB++ files
Create, destroy an instance using QisMOdbPS::New_object, QisMOdbPS::Delete_object
xxxxxxxxxxclass QisMOdbPSOpts { .. };
Represents modes of reflection
xxxxxxxxxxenum Reflect { RF_N=0 //No reflection ,RF_X //Reflect about Y (flip X) ,RF_Y //Reflect about X (flip Y) ,RF_XY //Reflect about Y and X (flip X & Y)};xxxxxxxxxxenum Type { ... };Set/Get the number of threads to be used for the corresponding operation
Set_param MUST be followed by ONE int value. 0 implies no. cpu(s) in the system
Get_param MUST be followed by ONE address to an int buffer to retrive the value
Default : 0
xxxxxxxxxxPRM_THRNUM=1 Set/Get the max. no. vertices in any generated polygon by the corresponding operation
Set_param MUST be followed by ONE int value. Max. 8190
Get_param MUST be followed by ONE address to an int buffer to retrive the value
Default : 8190
xxxxxxxxxx,PRM_MAXPTS Set/Get the amount of sizing to be applied to the polygons generated by the corresponding operation
Set_param MUST be followed by THREE double values -- sizing in X, sizing in Y and the sizing units in meter
Get_param MUST be followed by THREE addresses to a double buffers to retrive the values -- sizing in X, sizing in Y and sizing units in meter
Sizing values MUST have be either both positive, both negative or both 0.0 (no sizing)
Value for sizing units is interpreted as follows --
A value < 0.0 implies DPI (dots-per-inch)
A value > 10.0 implies DBU (database units) of the newly created database
Any other value implies meter (e.g 1e-6 = UM)
Default : 0.0,0.0,1e-6
xxxxxxxxxx,PRM_SIZING_XYSet/Get advanced parameters for the sizing operation
Set_param MUST be followed by ONE const char* string representing a set of parameters separated by <space>
Get_param MUST be followed by ONE address to a const char* buffer to retrive the string of parameters
Parameters with <space> in them MUST be enclosed in <double quote>
RESERVED for advanced use only as advised by Artwork
Default : ""
xxxxxxxxxx,PRM_SIZINGARGS Set/Get advanced parameters for the translation of ODB++ data
Set_param MUST be followed by ONE const char* string representing a set of parameters separated by <space>
Get_param MUST be followed by ONE address to a const char* buffer to retrive the string of parameters
Parameters with <space> in them MUST be enclosed in <double quote>
RESERVED for use only as advised by Artwork
Default : ""
xxxxxxxxxx,PRM_ADVANCED Set/Get the flag that enables troubleshooting the operation
Set_param MUST be followed by ONE int value -- 1 means ON, 0 means OFF
Get_param MUST be followed by ONE address to an int buffer to retrive the flag 1 or 0
If ON, temporary files are preserved even after unloading the database for inspection
Default : 0 (OFF)
xxxxxxxxxx,PRM_DBG Set/Get the unit for the newly created database
Set_param MUST be followed by ONE const char* string representing the unit
Get_param MUST be followed by ONE address to a const char* buffer to retrive the unit string
Valid units -- "mils","inch","um","mm","cm"
Default : "um"
xxxxxxxxxx,PRM_UNIT Set/Get the data resolution format
Set_param MUST be followed by TWO int values representing the number of places before and after the decimal point
Get_param MUST be followed by TWO addresses to int buffers to retrive the number of places before and after the decimal point
Default (depending on the units) --
"um" -- 5,3 (xxxxx.yyy)
"mm" -- 3,5
"cm" -- 2,6
"mils" -- 5,3
"inch" -- 2,6
xxxxxxxxxx,PRM_FORMAT Set/Get the arc resolution in degrees to determine how arcs are converted to polygon segments
Set_param MUST be followed by ONE double string representing the value
Get_param MUST be followed by ONE address to a double buffer to retrive the value
The finer of the two options - PRM_ARCRES and PRM_ARCSAG will be used
Default: auto-selected based on the data
xxxxxxxxxx,PRM_ARCRES Set/Get the chord error to determine how arcs are converted to polygon segments
Set_param MUST be followed by ONE double string representing the value
Get_param MUST be followed by ONE address to a double buffer to retrive the value
The finer of the two options - PRM_ARCRES and PRM_ARCSAG will be used
The chord error MUST be specified in the same units as the output. I.e the interpretation of the specified value depends on PRM_UNIT (which is um by default)
Default: auto-selected based on the data
xxxxxxxxxx,PRM_ARCSAG Set/Get the rotation angle as a multiple of 90 degrees
Set_param MUST be followed by ONE int representing the value which is multipled by 90 to determine the actual angle
Get_param MUST be followed by ONE address to a int buffer to retrive the 90-multiple
Default: 0 (0 x 90 = 0 degrees)
xxxxxxxxxx,PRM_ROTATE90 Set/Get the reflection (one of these modes)
Set_param MUST be followed by ONE int representing the reflection mode (QisMOdbPSOpts::Reflect)
Get_param MUST be followed by ONE address to a int buffer to retrive the reflection mode
Default: QisMOdbPSOpts::RF_N (no mirroring)
xxxxxxxxxx,PRM_REFLECT Set/Get the scaling factors along X and Y
Set_param MUST be followed by TWO double representing the scale (>0.0) along X followed by Y
Get_param MUST be followed by TWO addresses to double buffers to retrive the scale along X followed by Y
Default: 1.0,1.0
xxxxxxxxxx,PRM_SCALE Cast to a pointer of another version in the class hierarchy (base/derived)
Get the latest version number. Version numbers start at 1 and are reflected in the class name using the suffix V<number>. E.g <baseclass>V<version>
The topmost base class is version 1 (V1 implied)
The cast returns NULL if a version number is not recognized/implemented
xxxxxxxxxxvirtual const char* QisMOdbPSOpts_name(const int version) const = 0;virtual void* QisMOdbPSOpts_cast(const int version) = 0;virtual const void* QisMOdbPSOpts_cast(const int version) const = 0;virtual int QisMOdbPSOpts_latest_version() const = 0;Set/Get optional control parameters
See QisMOdbPSOpts::Type for details about the various options
Returns true if the specified parameter was recognized and used. false implies unknown paramter type or invalid value
xxxxxxxxxxvirtual bool Set_param(const int type, ...) = 0;virtual bool Get_param(const int type, ...) const = 0;Reset options to their default values
See QisMOdbPSOpts::Type for details about the various options
xxxxxxxxxxvirtual void Reset() = 0;Copy option values from the specified object
Returns true on success. false implies invalid source object handle
xxxxxxxxxxvirtual bool Copy(const QisMOdbPSOpts* obj) = 0;Represents a spatial database created from ODB++ files
Create one using QisMOdbPS::Load_odb and destroy it using QisMOdbPS::Unload_odb
Multiple databases can co-exist and be used independently of each other
xxxxxxxxxxclass QisMOdbPSFile { .. };
Cast to a pointer of another version in the class hierarchy (base/derived)
Get the latest version number. Version numbers start at 1 and are reflected in the class name using the suffix V<number>. E.g <baseclass>V<version>
The topmost base class is version 1 (V1 implied)
The cast returns NULL if a version number is not recognized/implemented
xxxxxxxxxxvirtual const char* QisMOdbPSFile_name(const int version) const = 0;virtual void* QisMOdbPSFile_cast(const int version) = 0;virtual const void* QisMOdbPSFile_cast(const int version) const = 0;virtual int QisMOdbPSFile_latest_version() const = 0;Get a handle to the underlying generic paint&scratch db for use with other QisMLib APIs
DO NOT destroy this handle using QisMLib::Unload_file. It will be automatically destroyed by Unload_odb
xxxxxxxxxxvirtual NsQisMLib::QisMFile* File_db() = 0;virtual const NsQisMLib::QisMFile* File_db() const = 0;Get information for an error condition represented by
code
Get_error_msg provides a human readable message with details
Get_error_tag represent the error type (see QisMError in qismbase.h)
Get_error_context is reserved for use in special builds for assisted troubleshooting
xxxxxxxxxxvirtual const char* Get_error_msg(const int code) const = 0;virtual const char* Get_error_tag(const int code) const = 0;virtual const char* Get_error_context(const int code) const = 0;Create a GDSII file on disk from this database at the specified
gds_output_path
Returns 0 on success. Otherwise, use Get_error_.. for more information
xxxxxxxxxxvirtual int Save_to_gdsii(const char* gds_output_path) const = 0;The primary interface to use the QisMOdbPS extension for creating and managing a paint&scratch spatial database from ODB++ files
Get a handle using QisMLib::Get_extension_api (qismlib.h) with QISMEXTENSION_ODBPS as the name
xxxxxxxxxxclass QisMOdbPS: public NsQisMLib::QisMExtensionAPI { ... };Cast to a pointer of another version in the class hierarchy (base/derived)
Get the latest version number. Version numbers start at 1 and are reflected in the class name using the suffix V<number>. E.g <baseclass>V<version>
The topmost base class is version 1 (V1 implied)
The cast returns NULL if a version number is not recognized/implemented
xxxxxxxxxxvirtual const char* QisMOdbPS_name(const int version) const = 0;virtual void* QisMOdbPS_cast(const int version) = 0;virtual const void* QisMOdbPS_cast(const int version) const = 0;virtual int QisMOdbPS_latest_version() const = 0;Get information for an error condition represented by
code
Get_error_msg provides a human readable message with details
Get_error_tag represent the error type (see QisMError in qismbase.h)
Get_error_context is reserved for use in special builds for assisted troubleshooting
xxxxxxxxxxvirtual const char* Get_error_msg(const int code) const = 0;virtual const char* Get_error_tag(const int code) const = 0;virtual const char* Get_error_context(const int code) const = 0;Create/Destroy an instance of an object of type
class_name
Supported types are --
QisMOdbPSOpts
Every object created using New_object MUST be eventually destroyed via an explicit call to Delete_object to avoid resource leaks. There is no automatic garbage collection in QisMOdbPS
xxxxxxxxxxvirtual void* New_object(const char* class_name) = 0;virtual void Delete_object(const char* class_name, void* handle) = 0;Create/Destroy a paint&scratch spatial database from ODB++ files for use with other QisMLib APIs
filedb is a buffer to receive the handle to the newly created database
lib_handle is the handle to the QisM library object
odb_path is the path of a valid ODB++ file repository
step is a valid step name in the specified ODB++ data
xxxxxxxxxxvirtual int Load_odb( QisMOdbPSFile*& filedb, NsQisMLib::QisMLib* lib_handle, const char* odb_path, const char* step, const char* layer, const char* working_dir = 0, const QisMOdbPSOpts* options = 0, QisMOdbPSNotify* progress_updates = 0, const int argc = 0, const char* const* argt = 0, void* const* argv = 0 ) = 0;virtual void Unload_odb(QisMOdbPSFile* handle) = 0;QisMScript Commands to -- Create a spatial paint&scratch database from ODB++ files
See qismodbps.h for the corresponding C++ api
Some commands require a license (QISMODBPS -- 11502)
xxxxxxxxxxodbps.load&filedb={id}odb={path}step={name}layer={name}[workdir={path}][thrnum={n}][maxpts={n}][advanced={args}] [dbg][sizing={x},{y},{mils | inch | um | mm | cm}][unit={mils | inch | um | mm | cm}][format={whole},{fraction}][arcres={degrees}][arcsag={value}][rotate90={multiple}][scale={x}[,{y}]][reflect=x | y | xy]
Create/Destroy a paint&scratch spatial database from ODB++ files for use with other QisMLib APIs
&filedb= provides name to be associated with the newly created database (type QisMOdbPSFile*)
odb= provides the path of the source ODB++ file
step= provides a valid step name in the specified ODB++ data
layer= provides a valid layer name in the specified ODB++ data
workdir= (if provided) is the directory where temporary files will reside for the life of this database. If left empty/NULL, the current working directory will be used
thrnum= (if specified) provides the number of threads to be used for the corresponding operation. (Default or 0 implies no. cpu(s) in the system)
maxpts= (if specified) provides the max. no. vertices in any generated polygon. (Default 8190)
sizing= provides the amount of sizing (in the specified units) to be applied to the polygons generated. Sizing values MUST have be either both positive, both negative or both 0.0 (no sizing). (Default 0.0 / no sizing)
unit= (if specified) provides the unit for the newly created database. (Default um)
format= (if specified) provides the data resolution in terms of no. digits before and after the decimal point (Default depends on the unit)
"um" -- 5,3 (xxxxx.yyy)
"mm" -- 3,5
"cm" -- 2,6
"mils" -- 5,3
"inch" -- 2,6
arcres= (if specified) provides the arc resolution in degrees to determine how arcs are converted to polygon segments (Default is selected automatically based on the data)
arcsag= (if specified) provides the chord error to determine how arcs are converted to polygon segments (Default is selected automatically based on the data)
rotate90= if specified is an integer multiple of 90 degrees indicating the amount of rotation to be applied to the whole design (rotation about 0,0)
scale= if specified indicates the amount of scaling to be applied to the whole design (> 0.0)
reflect= if specified indicates the mirroring scheme -- x (flip X), y (flip Y) and xy (flip X & Y)
advanced= (if specified) provides advanced parameters for the translation of ODB++ data. Parameters with <space> in them MUST be enclosed in <double quote>. RESERVED for use only as advised by Artwork
dbg (if specified) enables troubleshooting the operation. If ON, temporary files are preserved even after unloading the database for inspection
Every database created using odbps.load MUST be eventually destroyed via an explicit call to odbps.unload to avoid resource leaks. There is no automatic garbage collection in QisMOdbPS
Adds one new variable named {id} of type QisMFile* for use with other qismlib commands
Adds two new string variables {id}.grid and {id}.units representing the data grid and units in meter
xxxxxxxxxxodbps.unload$filedb={id}
Destroy the database created using odbps.load
Also removes the variable named {id} (type QisMFile*)`
Also removes the string variables {id}.units and {id}.grid representing the data units and grid
Product name :
QisMOdbPSLicense code :11502
Acquire : QisMOdbPS::Load_odb - one per call
Release : QisMOdbPS::Unload_odb - one per call
Policy : One license per ODB++ based database, held so long as the database persists
Product name :
QisMOdbPSLicense code :11501
Acquire : odbps.load - one per call
Release : odbps.unload - one per call
Policy : One license per ODB++ based database, held so long as the database persists. Actual license acquisition/release performed by the underlying QisMOdbPS C++ API
Fix to disable console popup during cleanup
Improved progress updates and ability to interrupt the load
Support for basic transformations (rotate, mirror, scale)
Suppresses console window of the translator
First cut
Last Updated -- Tue Jun 17 18:24:46 UTC 2025