qicadpcb.h
487 lines
| 14.5 KiB
| text/x-c
|
CLexer
/ qilib / qicadpcb.h
r3 | /*------------------------------------------------------------------------------ | |||
-- This file is a part of the Kicad Tools Software | ||||
-- Copyright (C) 2014, Plasma Physics Laboratory - CNRS | ||||
-- | ||||
-- 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||||
-------------------------------------------------------------------------------*/ | ||||
/*-- Author : Alexis Jeandet | ||||
-- Mail : alexis.jeandet@member.fsf.org | ||||
----------------------------------------------------------------------------*/ | ||||
#ifndef QICADPCB_H | ||||
#define QICADPCB_H | ||||
#include <QString> | ||||
#include <QStringList> | ||||
#include <QList> | ||||
#include <QFile> | ||||
#include <parsers/lispLike_driver.h> | ||||
#include <qicadlisplikelexique.h> | ||||
r7 | #include <QPointF> | |||
#include <QRectF> | ||||
r3 | ||||
namespace QIlib{ | ||||
r7 | const QPointF nodeTo2DCoords(QIlib::AbstractNode* node); | |||
const QSizeF nodeTo2DSize(QIlib::AbstractNode* node); | ||||
double nodeValueToDouble(QIlib::AbstractNode* node,int index=0); | ||||
int nodeValueToInt(QIlib::AbstractNode* node,int index=0); | ||||
class QIcadAbstractPcbLine : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadAbstractPcbLine(QIlib::AbstractNode* node) | ||||
:QIcadAbstractNodeWrapper(node) | ||||
{} | ||||
QIcadAbstractPcbLine(){} | ||||
virtual const QPointF& startPos(){return p_startpos;} | ||||
virtual const QPointF& stopPos(){return p_stoppos;} | ||||
virtual double width(){return p_width;} | ||||
virtual const QStringList& layers(){return p_layers;} | ||||
protected: | ||||
double p_width; | ||||
QPointF p_startpos; | ||||
QPointF p_stoppos; | ||||
QStringList p_layers; | ||||
}; | ||||
class QIcadPcbLayer : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
typedef enum | ||||
{ | ||||
signal, | ||||
user, | ||||
none | ||||
}layetType_t; | ||||
QIcadPcbLayer(QIlib::AbstractNode* node); | ||||
QIcadPcbLayer(){} | ||||
int index(){return p_index;} | ||||
const QString& name(){return p_name;} | ||||
layetType_t type(){return p_type;} | ||||
protected: | ||||
int p_index; | ||||
QString p_name; | ||||
layetType_t p_type; | ||||
}; | ||||
r6 | ||||
r5 | class QIcadPcbPlotParams : public QIcadAbstractNodeWrapper | |||
{ | ||||
public: | ||||
QIcadPcbPlotParams(QIlib::AbstractNode* node); | ||||
r6 | QIcadPcbPlotParams(){} | |||
r5 | QIcadAbstractNodeWrapper layerselection; | |||
QIcadAbstractNodeWrapper usegerberextensions; | ||||
QIcadAbstractNodeWrapper excludeedgelayer; | ||||
QIcadAbstractNodeWrapper linewidth; | ||||
QIcadAbstractNodeWrapper plotframeref; | ||||
QIcadAbstractNodeWrapper viasonmask; | ||||
QIcadAbstractNodeWrapper mode; | ||||
QIcadAbstractNodeWrapper useauxorigin; | ||||
QIcadAbstractNodeWrapper hpglpennumber; | ||||
QIcadAbstractNodeWrapper hpglpenspeed; | ||||
QIcadAbstractNodeWrapper hpglpendiameter; | ||||
QIcadAbstractNodeWrapper hpglpenoverlay; | ||||
QIcadAbstractNodeWrapper psnegative; | ||||
QIcadAbstractNodeWrapper psa4output; | ||||
QIcadAbstractNodeWrapper plotreference; | ||||
QIcadAbstractNodeWrapper plotvalue; | ||||
QIcadAbstractNodeWrapper plotothertext; | ||||
QIcadAbstractNodeWrapper plotinvisibletext; | ||||
QIcadAbstractNodeWrapper padsonsilk; | ||||
QIcadAbstractNodeWrapper subtractmaskfromsilk; | ||||
QIcadAbstractNodeWrapper outputformat; | ||||
QIcadAbstractNodeWrapper mirror; | ||||
QIcadAbstractNodeWrapper drillshape; | ||||
QIcadAbstractNodeWrapper scaleselection; | ||||
QIcadAbstractNodeWrapper outputdirectory; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
class QIcadPcbSetup : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadPcbSetup(QIlib::AbstractNode* node); | ||||
r6 | QIcadPcbSetup(){} | |||
r5 | QIcadAbstractNodeWrapper last_trace_width; | |||
QIcadAbstractNodeWrapper trace_clearance; | ||||
QIcadAbstractNodeWrapper zone_clearance; | ||||
QIcadAbstractNodeWrapper zone_45_only; | ||||
QIcadAbstractNodeWrapper trace_min; | ||||
QIcadAbstractNodeWrapper segment_width; | ||||
QIcadAbstractNodeWrapper edge_width; | ||||
QIcadAbstractNodeWrapper via_size; | ||||
QIcadAbstractNodeWrapper via_dril; | ||||
QIcadAbstractNodeWrapper via_min_size; | ||||
QIcadAbstractNodeWrapper via_min_drill; | ||||
QIcadAbstractNodeWrapper uvia_size; | ||||
QIcadAbstractNodeWrapper uvia_drill; | ||||
QIcadAbstractNodeWrapper uvias_allowed; | ||||
QIcadAbstractNodeWrapper uvia_min_size; | ||||
QIcadAbstractNodeWrapper uvia_min_drill; | ||||
QIcadAbstractNodeWrapper pcb_text_width; | ||||
QIcadAbstractNodeWrapper pcb_text_size; | ||||
QIcadAbstractNodeWrapper mod_edge_width; | ||||
QIcadAbstractNodeWrapper mod_text_size; | ||||
QIcadAbstractNodeWrapper mod_text_width; | ||||
QIcadAbstractNodeWrapper pad_size; | ||||
QIcadAbstractNodeWrapper pad_drill; | ||||
QIcadAbstractNodeWrapper pad_to_mask_clearance; | ||||
QIcadAbstractNodeWrapper aux_axis_origin; | ||||
QIcadAbstractNodeWrapper visible_elements; | ||||
QIcadPcbPlotParams plotParams; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
class QIcadPcbNetClass : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadPcbNetClass(QIlib::AbstractNode* node); | ||||
r6 | QIcadPcbNetClass(){} | |||
r5 | QIcadAbstractNodeWrapper clearance; | |||
QIcadAbstractNodeWrapper trace_width; | ||||
QIcadAbstractNodeWrapper via_dia; | ||||
QIcadAbstractNodeWrapper via_drill; | ||||
QIcadAbstractNodeWrapper uvia_dia; | ||||
QIcadAbstractNodeWrapper uvia_drill; | ||||
r6 | QList<QIcadAbstractNodeWrapper*> nets; | |||
r5 | void setNode(QIlib::AbstractNode* node); | |||
}; | ||||
class QIcadPcbFpTextEffectsFont : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadPcbFpTextEffectsFont(QIlib::AbstractNode* node); | ||||
QIcadAbstractNodeWrapper size; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
class QIcadPcbFpTextEffects : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadPcbFpTextEffects(QIlib::AbstractNode* node); | ||||
r6 | QIcadPcbFpTextEffects(){} | |||
r5 | QIcadAbstractNodeWrapper font; | |||
QIcadAbstractNodeWrapper thickness; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
r7 | class QIcadPcbFPText : public QIcadAbstractNodeWrapper | |||
r5 | { | |||
public: | ||||
r7 | QIcadPcbFPText(QIlib::AbstractNode* node); | |||
QIcadPcbFPText(){} | ||||
r5 | QIcadAbstractNodeWrapper at; | |||
QIcadAbstractNodeWrapper layer; | ||||
r7 | QIcadPcbFpTextEffects effects; | |||
r5 | void setNode(QIlib::AbstractNode* node); | |||
}; | ||||
r6 | class QIcadPcbModuleModel : public QIcadAbstractNodeWrapper | |||
{ | ||||
public: | ||||
QIcadPcbModuleModel(QIlib::AbstractNode* node); | ||||
QIcadPcbModuleModel(){} | ||||
QIcadAbstractNodeWrapper at; | ||||
QIcadAbstractNodeWrapper scale; | ||||
QIcadAbstractNodeWrapper rotate; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
class QIcadPcbDimension : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadPcbDimension(QIlib::AbstractNode* node); | ||||
QIcadPcbDimension(){} | ||||
QIcadAbstractNodeWrapper width; | ||||
QIcadAbstractNodeWrapper layer; | ||||
QIcadAbstractNodeWrapper gr_text; | ||||
QIcadAbstractNodeWrapper feature1; | ||||
QIcadAbstractNodeWrapper feature2; | ||||
QIcadAbstractNodeWrapper crossbar; | ||||
QIcadAbstractNodeWrapper arrow1a; | ||||
QIcadAbstractNodeWrapper arrow1b; | ||||
QIcadAbstractNodeWrapper arrow2a; | ||||
QIcadAbstractNodeWrapper arrow2b; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
r5 | ||||
r7 | class QIcadPcbPad : public QIcadAbstractNodeWrapper | |||
{ | ||||
public: | ||||
typedef enum | ||||
{ | ||||
rectangle, | ||||
circle | ||||
}padShape; | ||||
QIcadPcbPad(QIlib::AbstractNode* node); | ||||
QIcadPcbPad(){} | ||||
QIcadAbstractNodeWrapper at; | ||||
QIcadAbstractNodeWrapper sizeNode; | ||||
QIcadAbstractNodeWrapper layer; | ||||
QIcadAbstractNodeWrapper netNode; | ||||
QIcadAbstractNodeWrapper drillNode; | ||||
const QStringList& layers(){return p_layers;} | ||||
const QSizeF& size(){return p_size;} | ||||
const QPointF& pos(){return p_pos;} | ||||
double drill(){return p_drill;} | ||||
padShape shape(){return p_shape;} | ||||
void setNode(QIlib::AbstractNode* node); | ||||
private: | ||||
padShape p_shape; | ||||
double p_drill; | ||||
QSizeF p_size; | ||||
QPointF p_pos; | ||||
QStringList p_layers; | ||||
}; | ||||
class QIcadPcbFPLine : public QIcadAbstractPcbLine | ||||
{ | ||||
public: | ||||
QIcadPcbFPLine(QIlib::AbstractNode* node); | ||||
QIcadPcbFPLine(){} | ||||
QIcadAbstractNodeWrapper start; | ||||
QIcadAbstractNodeWrapper end; | ||||
QIcadAbstractNodeWrapper layer; | ||||
QIcadAbstractNodeWrapper width; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
class QIcadPcbFPCircle : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadPcbFPCircle(QIlib::AbstractNode* node); | ||||
QIcadPcbFPCircle(){} | ||||
QIcadAbstractNodeWrapper center; | ||||
QIcadAbstractNodeWrapper end; | ||||
QIcadAbstractNodeWrapper layer; | ||||
QIcadAbstractNodeWrapper width; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
r5 | class QIcadPcbModule : public QIcadAbstractNodeWrapper | |||
{ | ||||
public: | ||||
QIcadPcbModule(QIlib::AbstractNode* node); | ||||
r6 | QIcadPcbModule(){} | |||
r7 | const QPointF& pos(); | |||
double angle(); | ||||
r5 | QIcadAbstractNodeWrapper layer; | |||
QIcadAbstractNodeWrapper tedit; | ||||
QIcadAbstractNodeWrapper tstamp; | ||||
QIcadAbstractNodeWrapper at; | ||||
QIcadAbstractNodeWrapper descr; | ||||
QIcadAbstractNodeWrapper tags; | ||||
QIcadAbstractNodeWrapper path; | ||||
QIcadAbstractNodeWrapper attr; | ||||
r7 | QList<QIcadPcbFPText*> fp_texts; | |||
QList<QIcadPcbFPLine*> fp_lines; | ||||
QList<QIcadPcbFPCircle*> fp_circles; | ||||
QList<QIcadPcbPad*> pads; | ||||
r6 | QIcadPcbModuleModel model; | |||
void setNode(QIlib::AbstractNode* node); | ||||
r7 | void clrPads(); | |||
void apendPad(QIlib::AbstractNode* node); | ||||
void clrTexts(); | ||||
void apendText(QIlib::AbstractNode* node); | ||||
void clrLines(); | ||||
void apendLine(QIlib::AbstractNode* node); | ||||
void clrCircles(); | ||||
void apendCircle(QIlib::AbstractNode* node); | ||||
private: | ||||
QPointF p_pos; | ||||
double p_angle; | ||||
r6 | }; | |||
r7 | class QIcadPcbSegment : public QIcadAbstractPcbLine | |||
r6 | { | |||
public: | ||||
QIcadPcbSegment(QIlib::AbstractNode* node); | ||||
QIcadPcbSegment(){} | ||||
QIcadAbstractNodeWrapper start; | ||||
QIcadAbstractNodeWrapper end; | ||||
QIcadAbstractNodeWrapper width; | ||||
QIcadAbstractNodeWrapper layer; | ||||
QIcadAbstractNodeWrapper net; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
r7 | ||||
r6 | class QIcadPcbVia : public QIcadAbstractNodeWrapper | |||
{ | ||||
public: | ||||
QIcadPcbVia(QIlib::AbstractNode* node); | ||||
QIcadPcbVia(){} | ||||
QIcadAbstractNodeWrapper at; | ||||
r7 | QIcadAbstractNodeWrapper sizeNode; | |||
QIcadAbstractNodeWrapper drillNode; | ||||
QIcadAbstractNodeWrapper layersNode; | ||||
r6 | QIcadAbstractNodeWrapper net; | |||
r7 | QIcadAbstractNodeWrapper tstamp; | |||
r6 | void setNode(QIlib::AbstractNode* node); | |||
r7 | const QStringList& layers(){return p_layers;} | |||
const QSizeF& size(){return p_size;} | ||||
const QPointF& pos(){return p_pos;} | ||||
double drill(){return p_drill;} | ||||
private: | ||||
double p_drill; | ||||
QSizeF p_size; | ||||
QPointF p_pos; | ||||
QStringList p_layers; | ||||
r6 | }; | |||
r7 | class QIcadPcbLine : public QIcadAbstractPcbLine | |||
r6 | { | |||
public: | ||||
QIcadPcbLine(QIlib::AbstractNode* node); | ||||
QIcadPcbLine(){} | ||||
QIcadAbstractNodeWrapper start; | ||||
QIcadAbstractNodeWrapper end; | ||||
QIcadAbstractNodeWrapper angle; | ||||
QIcadAbstractNodeWrapper layer; | ||||
QIcadAbstractNodeWrapper width; | ||||
r5 | void setNode(QIlib::AbstractNode* node); | |||
}; | ||||
r7 | class QIcadPcbZone : public QIcadAbstractNodeWrapper | |||
{ | ||||
public: | ||||
QIcadPcbZone(QIlib::AbstractNode* node); | ||||
QIcadPcbZone(){} | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
class QIcadPcbArc : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadPcbArc(QIlib::AbstractNode* node); | ||||
QIcadPcbArc(){} | ||||
QIcadAbstractNodeWrapper start; | ||||
QIcadAbstractNodeWrapper end; | ||||
QIcadAbstractNodeWrapper angle; | ||||
QIcadAbstractNodeWrapper layer; | ||||
QIcadAbstractNodeWrapper width; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
class QIcadPcbCircle : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadPcbCircle(QIlib::AbstractNode* node); | ||||
QIcadPcbCircle(){} | ||||
QIcadAbstractNodeWrapper center; | ||||
QIcadAbstractNodeWrapper end; | ||||
QIcadAbstractNodeWrapper layer; | ||||
QIcadAbstractNodeWrapper width; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
class QIcadPcbText : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadPcbText(QIlib::AbstractNode* node); | ||||
QIcadPcbText(){} | ||||
QIcadAbstractNodeWrapper at; | ||||
QIcadAbstractNodeWrapper layer; | ||||
QIcadAbstractNodeWrapper width; | ||||
QIcadPcbFpTextEffects effects; | ||||
void setNode(QIlib::AbstractNode* node); | ||||
}; | ||||
r5 | class QIcadPcbLayers : public QIcadAbstractNodeWrapper | |||
{ | ||||
public: | ||||
QIcadPcbLayers(QIlib::AbstractNode* node); | ||||
r6 | QIcadPcbLayers(){} | |||
r7 | QList<QIcadPcbLayer*> layers; | |||
r5 | void setNode(QIlib::AbstractNode* node); | |||
r7 | void clrLayers(); | |||
void apendLayer(QIlib::AbstractNode* node); | ||||
r5 | }; | |||
Jeandet Alexis
|
r4 | |||
class QIcadPcbGeneralInfo : public QIcadAbstractNodeWrapper | ||||
{ | ||||
public: | ||||
QIcadPcbGeneralInfo(QIlib::AbstractNode* node); | ||||
r6 | QIcadPcbGeneralInfo(){} | |||
r5 | QIcadAbstractNodeWrapper links; | |||
QIcadAbstractNodeWrapper no_connections; | ||||
QIcadAbstractNodeWrapper area; | ||||
QIcadAbstractNodeWrapper thickness; | ||||
QIcadAbstractNodeWrapper drawings; | ||||
QIcadAbstractNodeWrapper tracks; | ||||
QIcadAbstractNodeWrapper zones; | ||||
QIcadAbstractNodeWrapper modules; | ||||
QIcadAbstractNodeWrapper nets; | ||||
Jeandet Alexis
|
r4 | void setNode(QIlib::AbstractNode* node); | ||
}; | ||||
r3 | class QIcadPcbRoot : public QIcadAbstractNodeWrapper | |||
{ | ||||
public: | ||||
QIcadPcbRoot(QIlib::AbstractNode* node); | ||||
QIcadAbstractNodeWrapper version; | ||||
QIcadAbstractNodeWrapper host; | ||||
Jeandet Alexis
|
r4 | QIcadAbstractNodeWrapper page; | ||
r5 | QIcadPcbGeneralInfo general; | |||
QIcadPcbLayers layers; | ||||
QIcadPcbSetup setup; | ||||
r6 | QList<QIcadAbstractNodeWrapper*> nets; | |||
QList<QIcadPcbModule*> modules; | ||||
QList<QIcadPcbDimension*> dimensions; | ||||
QList<QIcadPcbLine*> lines; | ||||
QList<QIcadPcbSegment*> segments; | ||||
QList<QIcadPcbVia*> vias; | ||||
r7 | QList<QIcadPcbArc*> arcs; | |||
QList<QIcadPcbCircle*> circles; | ||||
QList<QIcadPcbText*> texts; | ||||
QList<QIcadPcbZone*> zones; | ||||
r3 | void setNode(QIlib::AbstractNode* node); | |||
r6 | void clrNets(); | |||
void apendNet(QIlib::AbstractNode* node); | ||||
r7 | void clrModules(); | |||
void apendModule(QIlib::AbstractNode* node); | ||||
void clrDimensions(); | ||||
void apendDimension(QIlib::AbstractNode* node); | ||||
void apendLine(QIlib::AbstractNode* node); | ||||
void clrLines(); | ||||
void clrSegments(); | ||||
void apendSegment(QIlib::AbstractNode* node); | ||||
void clrVias(); | ||||
void apendVia(QIlib::AbstractNode* node); | ||||
void clrArcs(); | ||||
void apendArc(QIlib::AbstractNode* node); | ||||
void clrCircles(); | ||||
void apendCircle(QIlib::AbstractNode* node); | ||||
void clrTexts(); | ||||
void apendText(QIlib::AbstractNode* node); | ||||
void clrZones(); | ||||
void apendZone(QIlib::AbstractNode* node); | ||||
r3 | }; | |||
class QIcadPcb : private lispLike_Driver | ||||
{ | ||||
public: | ||||
QIcadPcb(); | ||||
bool parsePcb(const QString& pcb); | ||||
QString toString(); | ||||
QString fileName; | ||||
QString print(); | ||||
r6 | ||||
QIcadPcbRoot* pcbRoot; | ||||
r3 | private: | |||
void updateConcreteTree(); | ||||
}; | ||||
} | ||||
#endif // QICADPCB_H | ||||