klayout/src/plugins/streamers/maly/db_plugin/dbMALY.h

288 lines
5.0 KiB
C++

/*
KLayout Layout Viewer
Copyright (C) 2006-2025 Matthias Koefferlein
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef HDR_dbMALY
#define HDR_dbMALY
#include "dbPoint.h"
#include "dbTrans.h"
#include "dbBox.h"
#include "tlException.h"
#include "tlInternational.h"
#include "tlString.h"
#include "tlAssert.h"
#include <string>
#include <vector>
namespace db
{
/**
* @brief The diagnostics interface for reporting problems in the reader or writer
*/
class MALYDiagnostics
{
public:
virtual ~MALYDiagnostics ();
/**
* @brief Issue an error with positional information
*/
virtual void error (const std::string &txt) = 0;
/**
* @brief Issue a warning with positional information
*/
virtual void warn (const std::string &txt, int warn_level) = 0;
};
/**
* @brief A class representing a title field on a mask
*/
class MALYTitle
{
public:
/**
* @brief Default constructor
*/
MALYTitle ()
: width (0.0), height (0.0), pitch (0.0), type (String), font (Standard)
{ }
/**
* @brief The type of the title
*/
enum Type
{
String = 0, // A user-defined string
Date = 1, // The date
Serial = 2 // A serial number
};
/**
* @brief The font to be used
*/
enum Font
{
FontNotSet = 0, // Undef
Standard = 1, // Standard font
Native = 2 // Native tool font
};
/**
* @brief The string for "String" type
*/
std::string string;
/**
* @brief The transformation of the title
*
* The origin of the title is supposed to be in the center of
* the title field.
*/
db::DTrans transformation;
/**
* @brief Optional font parameters: character width
*/
double width;
/**
* @brief Optional font parameters: character height
*/
double height;
/**
* @brief Optional font parameters: character pitch
*/
double pitch;
/**
* @brief The type of the title
*/
Type type;
/**
* @brief The font to be used
*/
Font font;
/**
* @brief Returns a string representing the structure
*/
std::string to_string () const;
};
/**
* @brief A class representing a structure (pattern) on a mask
*/
class MALYStructure
{
public:
/**
* @brief Default constructor
*/
MALYStructure ()
: nx (1), ny (1), dx (0.0), dy (0.0), layer (-1)
{ }
/**
* @brief The (expanded) path of the pattern file
*/
std::string path;
/**
* @brief The name of the top cell
* If empty, the topcell is determined automatically
*/
std::string topcell;
/**
* @brief The pattern window in the original file
*/
db::DBox size;
/**
* @brief The transformation needed to place the original file
*/
db::DCplxTrans transformation;
/**
* @brief The number of placements in x direction
*/
int nx;
/**
* @brief The number of placements in y direction
*/
int ny;
/**
* @brief The placement pitch in x direction (if nx > 1)
*/
double dx;
/**
* @brief The placement pitch in y direction (if ny > 1)
*/
double dy;
/**
* @brief The design name
*/
std::string dname;
/**
* @brief The name for the mask process
*/
std::string mname;
/**
* @brief The name for the mask tool
*/
std::string ename;
/**
* @brief The layer used from the OASIS file
*
* A value of -1 means "all".
*/
int layer;
/**
* @brief Returns a string representing the structure
*/
std::string to_string () const;
};
/**
* @brief A class representing one mask
*/
class MALYMask
{
public:
/**
* @brief Default constructor
*/
MALYMask ()
: size_um (0.0)
{ }
/**
* @brief Size of the mask in micrometers
*/
double size_um;
/**
* @brief Name of the mask
*
* This is also the name of the layer generated
*/
std::string name;
/**
* @brief The list of structures
*/
std::list<MALYStructure> structures;
/**
* @brief The list of titles
*/
std::list<MALYTitle> titles;
/**
* @brief Returns a string representing the mask
*/
std::string to_string () const;
};
/**
* @brief A class representing the MALY file
*/
class MALYData
{
public:
/**
* @brief Default constructor
*/
MALYData ()
{ }
/**
* @brief The masks defined by the file
*/
std::list<MALYMask> masks;
/**
* @brief Returns a string representing the data set
*/
std::string to_string () const;
};
}
#endif