2007-12-29 19:27:58 +00:00
|
|
|
// definition of ID structure used by FreePCB
|
|
|
|
//
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
// struct id : this structure is used to identify PCB design elements
|
|
|
|
// such as instances of parts or nets, and their subelements
|
|
|
|
// Each element will have its own id.
|
|
|
|
// An id is attached to each item of the Display List so that it can
|
|
|
|
// be linked back to the PCB design element which drew it.
|
|
|
|
// These are mainly used to identify items selected by clicking the mouse
|
|
|
|
//
|
|
|
|
// In general:
|
|
|
|
// id.type = type of PCB element (e.g. part, net, text)
|
|
|
|
// id.st = subelement type (e.g. part pad, net connection)
|
|
|
|
// id.i = subelement index (zero-based)
|
|
|
|
// id.sst = subelement of subelement (e.g. net connection segment)
|
|
|
|
// id.ii = subsubelement index (zero-based)
|
|
|
|
//
|
|
|
|
// For example, the id for segment 0 of connection 4 of net 12 would be
|
|
|
|
// id = { ID_NET, 12, ID_CONNECT, 4, ID_SEG, 0 };
|
|
|
|
//
|
|
|
|
//
|
|
|
|
class id {
|
|
|
|
public:
|
|
|
|
// constructor
|
|
|
|
id( int qt=0, int qst=0, int qis=0, int qsst=0, int qiis=0 )
|
|
|
|
{ type=qt; st=qst; i=qis; sst=qsst; ii=qiis; }
|
|
|
|
// operators
|
|
|
|
friend int operator ==(id id1, id id2)
|
|
|
|
{ return (id1.type==id2.type
|
|
|
|
&& id1.st==id2.st
|
|
|
|
&& id1.sst==id2.sst
|
|
|
|
&& id1.i==id2.i
|
|
|
|
&& id1.ii==id2.ii );
|
|
|
|
}
|
|
|
|
// member functions
|
|
|
|
void Clear()
|
|
|
|
{ type=0; st=0; i=0; sst=0; ii=0; }
|
|
|
|
void Set( int qt, int qst=0, int qis=0, int qsst=0, int qiis=0 )
|
|
|
|
{ type=qt; st=qst; i=qis; sst=qsst; ii=qiis; }
|
|
|
|
// member variables
|
|
|
|
unsigned int type; // type of element
|
|
|
|
unsigned int st; // type of subelement
|
|
|
|
unsigned int i; // index of subelement
|
|
|
|
unsigned int sst; // type of subsubelement
|
|
|
|
unsigned int ii; // index of subsubelement
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// these are constants used in ids
|
|
|
|
// root types
|
|
|
|
enum {
|
|
|
|
ID_NONE = 0, // an undefined type or st (or an error)
|
|
|
|
ID_BOARD, // board outline
|
|
|
|
ID_PART, // part
|
|
|
|
ID_NET, // net
|
|
|
|
ID_TEXT, // free-standing text
|
|
|
|
ID_DRC, // DRC error
|
|
|
|
ID_SM_CUTOUT, // cutout for solder mask
|
|
|
|
ID_MULTI // if multiple selections
|
|
|
|
};
|
|
|
|
|
|
|
|
// subtypes of ID_PART
|
|
|
|
enum {
|
|
|
|
ID_PAD = 1, // pad_stack in a part
|
|
|
|
ID_SEL_PAD, // selection rectangle for pad_stack in a part
|
|
|
|
ID_OUTLINE, // part outline
|
|
|
|
ID_REF_TXT, // text showing ref num for part
|
|
|
|
ID_ORIG, // part origin
|
|
|
|
ID_SEL_RECT, // selection rectangle for part
|
|
|
|
ID_SEL_REF_TXT // selection rectangle for ref text
|
|
|
|
};
|
|
|
|
|
|
|
|
// subtypes of ID_TEXT
|
|
|
|
enum {
|
|
|
|
ID_SEL_TXT = 1, // selection rectangle
|
|
|
|
ID_STROKE // stroke for text
|
|
|
|
};
|
|
|
|
|
|
|
|
// subtypes of ID_NET
|
|
|
|
enum {
|
|
|
|
ID_ENTIRE_NET = 0,
|
|
|
|
ID_CONNECT, // connection
|
|
|
|
ID_AREA // copper area
|
|
|
|
};
|
|
|
|
|
|
|
|
// subtypes of ID_BOARD
|
|
|
|
enum {
|
|
|
|
ID_BOARD_OUTLINE = 1,
|
|
|
|
};
|
|
|
|
|
|
|
|
// subsubtypes of ID_NET.ID_CONNECT
|
|
|
|
enum {
|
|
|
|
ID_ENTIRE_CONNECT = 0,
|
|
|
|
ID_SEG,
|
|
|
|
ID_SEL_SEG,
|
|
|
|
ID_VERTEX,
|
|
|
|
ID_SEL_VERTEX,
|
|
|
|
ID_VIA
|
|
|
|
};
|
|
|
|
|
|
|
|
// subsubtypes of ID_NET.ID_AREA, ID_BOARD.ID_BOARD_OUTLINE, ID_SM_CUTOUT
|
|
|
|
enum {
|
|
|
|
ID_SIDE = 1,
|
|
|
|
ID_SEL_SIDE,
|
|
|
|
ID_SEL_CORNER,
|
|
|
|
ID_HATCH,
|
|
|
|
ID_PIN_X, // only used by ID_AREA
|
|
|
|
ID_STUB_X // only used by ID_AREA
|
|
|
|
};
|
|
|
|
|
|
|
|
// subtypes of ID_DRC
|
|
|
|
// for subsubtypes, use types in DesignRules.h
|
|
|
|
enum {
|
|
|
|
ID_DRE = 1,
|
|
|
|
ID_SEL_DRE
|
|
|
|
};
|
|
|
|
|