@@ -886,7 +886,7 void QIlib::QIcadPcbPad::setNode(QIlib:: | |||
|
886 | 886 | { |
|
887 | 887 | this->p_shape = circle; |
|
888 | 888 | } |
|
889 | ||
|
889 | this->p_padNumber = nodeValueToInt(node,0); | |
|
890 | 890 | } |
|
891 | 891 | for(int i=0;i<node->nodes.count();i++) |
|
892 | 892 | { |
@@ -894,6 +894,7 void QIlib::QIcadPcbPad::setNode(QIlib:: | |||
|
894 | 894 | { |
|
895 | 895 | this->at.setNode(node->nodes.at(i)); |
|
896 | 896 | this->p_pos = nodeTo2DCoords(node->nodes.at(i)); |
|
897 | this->p_angle = nodeValueToDouble(node->nodes.at(i),2); | |
|
897 | 898 | } |
|
898 | 899 | if(node->nodes.at(i)->name==QIlib::Lexique::size_c) |
|
899 | 900 | { |
@@ -238,11 +238,15 public: | |||
|
238 | 238 | const QSizeF& size(){return p_size;} |
|
239 | 239 | const QPointF& pos(){return p_pos;} |
|
240 | 240 | double drill(){return p_drill;} |
|
241 | double angle(){return p_angle;} | |
|
241 | 242 | padShape shape(){return p_shape;} |
|
243 | int padNumber(){return p_padNumber;} | |
|
242 | 244 | void setNode(QIlib::AbstractNode* node); |
|
243 | 245 | private: |
|
246 | int p_padNumber; | |
|
244 | 247 | padShape p_shape; |
|
245 | 248 | double p_drill; |
|
249 | double p_angle; | |
|
246 | 250 | QSizeF p_size; |
|
247 | 251 | QPointF p_pos; |
|
248 | 252 | QStringList p_layers; |
@@ -24,6 +24,7 | |||
|
24 | 24 | #include "pcbmodule.h" |
|
25 | 25 | #include "pcbline.h" |
|
26 | 26 | #include "pcbvia.h" |
|
27 | #include <QFileDialog> | |
|
27 | 28 | |
|
28 | 29 | |
|
29 | 30 | MainWindow::MainWindow(QWidget *parent) : |
@@ -32,36 +33,11 MainWindow::MainWindow(QWidget *parent) | |||
|
32 | 33 | { |
|
33 | 34 | ui->setupUi(this); |
|
34 | 35 | this->p_scene = new QGraphicsScene(); |
|
35 | this->p_scene->setSceneRect(0, 0, 500, 200); | |
|
36 | ||
|
37 | 36 | this->context = new PCBContext(); |
|
38 | 37 | this->ui->graphicsView->setScene(this->p_scene); |
|
39 | QIlib::QIcadPcb pcbDriver; | |
|
40 | // pcbDriver.parsePcb("/opt/kicadTools/test/testFiles/pcb2.kicad_pcb"); | |
|
41 | // pcbDriver.parsePcb("/home/jeandet/Documents/PCB/ADC_STAMP/ADC_STAMP.kicad_pcb"); | |
|
42 | pcbDriver.parsePcb("/usr/share/kicad/demos/video/video.kicad_pcb"); | |
|
43 | // pcbDriver.parsePcb("/usr/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.kicad_pcb"); | |
|
44 | for(int i=0;i<pcbDriver.pcbRoot->layers.layers.count();i++) | |
|
45 | { | |
|
46 | this->context->addlayer(pcbDriver.pcbRoot->layers.layers.at(i)->name(),pcbDriver.pcbRoot->layers.layers.at(i)->index()); | |
|
47 | } | |
|
48 | for(int i=0;i<pcbDriver.pcbRoot->modules.count();i++) | |
|
49 | { | |
|
50 | this->p_scene->addItem(new PCBModule(pcbDriver.pcbRoot->modules.at(i),this->context)); | |
|
51 | } | |
|
52 | for(int i=0;i<pcbDriver.pcbRoot->lines.count();i++) | |
|
53 | { | |
|
54 | this->p_scene->addItem(new PCBLine((QIlib::QIcadAbstractPcbLine*)pcbDriver.pcbRoot->lines.at(i),this->context)); | |
|
55 | } | |
|
56 | for(int i=0;i<pcbDriver.pcbRoot->segments.count();i++) | |
|
57 | { | |
|
58 | this->p_scene->addItem(new PCBLine((QIlib::QIcadAbstractPcbLine*)pcbDriver.pcbRoot->segments.at(i),this->context)); | |
|
59 | } | |
|
60 | for(int i=0;i<pcbDriver.pcbRoot->vias.count();i++) | |
|
61 | { | |
|
62 | this->p_scene->addItem(new PCBVia(pcbDriver.pcbRoot->vias.at(i),this->context)); | |
|
63 | } | |
|
38 | this->pcbDriver =NULL; | |
|
64 | 39 | connect(this->ui->actionRedraw,SIGNAL(triggered(bool)),this,SLOT(redraw())); |
|
40 | connect(this->ui->actionOpen,SIGNAL(triggered(bool)),this,SLOT(openFile())); | |
|
65 | 41 | } |
|
66 | 42 | |
|
67 | 43 | MainWindow::~MainWindow() |
@@ -74,6 +50,15 void MainWindow::redraw() | |||
|
74 | 50 | this->p_scene->update(); |
|
75 | 51 | } |
|
76 | 52 | |
|
53 | void MainWindow::openFile() | |
|
54 | { | |
|
55 | QString file = QFileDialog::getOpenFileName(this,tr("Open kicad PCB file"), | |
|
56 | "", | |
|
57 | tr("PCB file (*.kicad_pcb)")); | |
|
58 | if(QFile::exists(file)) | |
|
59 | loadFile(file); | |
|
60 | } | |
|
61 | ||
|
77 | 62 | void MainWindow::changeEvent(QEvent *e) |
|
78 | 63 | { |
|
79 | 64 | QMainWindow::changeEvent(e); |
@@ -85,3 +70,36 void MainWindow::changeEvent(QEvent *e) | |||
|
85 | 70 | break; |
|
86 | 71 | } |
|
87 | 72 | } |
|
73 | ||
|
74 | void MainWindow::loadFile(const QString &file) | |
|
75 | { | |
|
76 | this->p_scene->setSceneRect(0, 0, 500, 200); | |
|
77 | if(pcbDriver!=NULL)delete pcbDriver; | |
|
78 | pcbDriver = new QIlib::QIcadPcb(); | |
|
79 | this->context->clear(); | |
|
80 | this->p_scene->clear(); | |
|
81 | // pcbDriver.parsePcb("/opt/kicadTools/test/testFiles/pcb2.kicad_pcb"); | |
|
82 | // pcbDriver.parsePcb("/home/jeandet/Documents/PCB/ADC_STAMP/ADC_STAMP.kicad_pcb"); | |
|
83 | pcbDriver->parsePcb(file); | |
|
84 | // pcbDriver.parsePcb("/usr/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.kicad_pcb"); | |
|
85 | for(int i=0;i<pcbDriver->pcbRoot->layers.layers.count();i++) | |
|
86 | { | |
|
87 | this->context->addlayer(pcbDriver->pcbRoot->layers.layers.at(i)->name(),pcbDriver->pcbRoot->layers.layers.at(i)->index()); | |
|
88 | } | |
|
89 | for(int i=0;i<pcbDriver->pcbRoot->modules.count();i++) | |
|
90 | { | |
|
91 | this->p_scene->addItem(new PCBModule(pcbDriver->pcbRoot->modules.at(i),this->context)); | |
|
92 | } | |
|
93 | for(int i=0;i<pcbDriver->pcbRoot->lines.count();i++) | |
|
94 | { | |
|
95 | this->p_scene->addItem(new PCBLine((QIlib::QIcadAbstractPcbLine*)pcbDriver->pcbRoot->lines.at(i),this->context)); | |
|
96 | } | |
|
97 | for(int i=0;i<pcbDriver->pcbRoot->segments.count();i++) | |
|
98 | { | |
|
99 | this->p_scene->addItem(new PCBLine((QIlib::QIcadAbstractPcbLine*)pcbDriver->pcbRoot->segments.at(i),this->context)); | |
|
100 | } | |
|
101 | for(int i=0;i<pcbDriver->pcbRoot->vias.count();i++) | |
|
102 | { | |
|
103 | this->p_scene->addItem(new PCBVia(pcbDriver->pcbRoot->vias.at(i),this->context)); | |
|
104 | } | |
|
105 | } |
@@ -45,13 +45,16 public: | |||
|
45 | 45 | |
|
46 | 46 | public slots: |
|
47 | 47 | void redraw(); |
|
48 | void openFile(); | |
|
48 | 49 | protected: |
|
49 | 50 | void changeEvent(QEvent *e); |
|
50 | 51 | |
|
51 | 52 | private: |
|
53 | void loadFile(const QString& file); | |
|
52 | 54 | Ui::MainWindow *ui; |
|
53 | 55 | QGraphicsScene* p_scene; |
|
54 | 56 | PCBContext* context; |
|
57 | QIlib::QIcadPcb* pcbDriver; | |
|
55 | 58 | }; |
|
56 | 59 | |
|
57 | 60 | #endif // MAINWINDOW_H |
@@ -71,3 +71,9 const QString PCBContext::layer(int numb | |||
|
71 | 71 | return layers_map.key(number); |
|
72 | 72 | } |
|
73 | 73 | |
|
74 | void PCBContext::clear() | |
|
75 | { | |
|
76 | this->layers_colors.clear(); | |
|
77 | this->layers_map.clear(); | |
|
78 | } | |
|
79 |
@@ -36,6 +36,7 public: | |||
|
36 | 36 | const QColor& layerColor(const QString& name); |
|
37 | 37 | const QColor& layerColor(int number); |
|
38 | 38 | const QString layer(int number); |
|
39 | void clear(); | |
|
39 | 40 | signals: |
|
40 | 41 | |
|
41 | 42 | public slots: |
@@ -42,9 +42,11 void PCBRectPad::init( QPointF offset) | |||
|
42 | 42 | offset-=QPointF(this->padNode->size().width()/2,this->padNode->size().height()/2); |
|
43 | 43 | if(this->padNode->shape()==QIlib::QIcadPcbPad::rectangle) |
|
44 | 44 | { |
|
45 | QRectF rec(this->padNode->pos()+offset,this->padNode->size()); | |
|
45 | 46 | for(int i=0;i<this->padNode->layers().count();i++) |
|
46 | 47 | { |
|
47 | 48 | QGraphicsRectItem* rect = new QGraphicsRectItem(); |
|
49 | rect->setTransformOriginPoint(rec.center()); | |
|
48 | 50 | QPen pen = rect->pen(); |
|
49 | 51 | pen.setWidthF(0.01); |
|
50 | 52 | rect->setPen(pen); |
@@ -52,11 +54,17 void PCBRectPad::init( QPointF offset) | |||
|
52 | 54 | brush.setStyle(Qt::SolidPattern); |
|
53 | 55 | brush.setColor(context->layerColor(this->padNode->layers().at(i))); |
|
54 | 56 | rect->setBrush(brush); |
|
55 | QRectF rec(this->padNode->pos()+offset,this->padNode->size()); | |
|
56 | 57 | rect->setRect(rec); |
|
57 | 58 | rect->setZValue(-context->layer(padNode->layers().at(i))); |
|
59 | rect->setRotation(padNode->angle()); | |
|
58 | 60 | this->addToGroup(rect); |
|
59 | 61 | } |
|
62 | QGraphicsTextItem* text=new QGraphicsTextItem(QString::number(padNode->padNumber())); | |
|
63 | text->setPos(rec.center()); | |
|
64 | text->setScale(0.01); | |
|
65 | text->setZValue(1); | |
|
66 | this->addToGroup(text); | |
|
67 | ||
|
60 | 68 | } |
|
61 | 69 | if(this->padNode->shape()==QIlib::QIcadPcbPad::circle) |
|
62 | 70 | { |
@@ -37,26 +37,29 PCBVia::PCBVia(QIlib::QIcadPcbVia *viaNo | |||
|
37 | 37 | |
|
38 | 38 | void PCBVia::init(QPointF offset) |
|
39 | 39 | { |
|
40 | this->path.addEllipse(this->viaNode->pos(),this->viaNode->size().width()/2,this->viaNode->size().height()/2); | |
|
41 | double thickness = (this->viaNode->size().width()-this->viaNode->drill())/2; | |
|
42 | this->path.addEllipse(this->viaNode->pos(),(this->viaNode->size().width()/2)-thickness,(this->viaNode->size().height()/2)-thickness); | |
|
40 | 43 | this->setCacheMode(QGraphicsItem::DeviceCoordinateCache); |
|
41 | 44 | this->setFlags(ItemIsMovable|ItemIsSelectable|ItemIsFocusable); |
|
42 | 45 | offset-=QPointF(this->viaNode->size().width()/2,this->viaNode->size().height()/2); |
|
43 | 46 | |
|
44 | 47 | for(int i=0;i<this->viaNode->layers().count();i++) |
|
45 | 48 | { |
|
46 |
QGraphics |
|
|
47 |
QPen pen = |
|
|
48 | double thickness = (this->viaNode->size().width()-this->viaNode->drill())/2; | |
|
49 | pen.setWidthF(thickness); | |
|
49 | QGraphicsPathItem* pathitem = new QGraphicsPathItem(); | |
|
50 | QPen pen = pathitem->pen(); | |
|
51 | pen.setWidthF(0.01); | |
|
50 | 52 | |
|
51 |
|
|
|
52 |
|
|
|
53 |
|
|
|
54 |
|
|
|
55 |
|
|
|
56 | QRectF rec(this->viaNode->pos()+offset,QSizeF(this->viaNode->size().width()-thickness,this->viaNode->size().width()-thickness)); | |
|
57 |
|
|
|
58 |
|
|
|
59 | this->addToGroup(ellipse); | |
|
53 | pathitem->setPen(pen); | |
|
54 | QBrush brush = pathitem->brush(); | |
|
55 | brush.setStyle(Qt::SolidPattern); | |
|
56 | brush.setColor(context->layerColor(this->viaNode->layers().at(i))); | |
|
57 | pathitem->setBrush(brush); | |
|
58 | // QRectF rec(this->viaNode->pos()+offset,QSizeF(this->viaNode->size().width()-thickness,this->viaNode->size().width()-thickness)); | |
|
59 | // pathitem->setRect(rec); | |
|
60 | pathitem->setZValue(-context->layer(viaNode->layers().at(i))); | |
|
61 | pathitem->setPath(path); | |
|
62 | this->addToGroup(pathitem); | |
|
60 | 63 | } |
|
61 | 64 | |
|
62 | 65 | setOpacity(0.6); |
@@ -27,6 +27,7 | |||
|
27 | 27 | #include <QGraphicsItemGroup> |
|
28 | 28 | #include <pcbcontext.h> |
|
29 | 29 | #include <qicadpcb.h> |
|
30 | #include <QPainterPath> | |
|
30 | 31 | |
|
31 | 32 | class PCBVia: public QGraphicsItemGroup |
|
32 | 33 | { |
@@ -41,6 +42,7 private: | |||
|
41 | 42 | QRectF size; |
|
42 | 43 | QList<int> layers; |
|
43 | 44 | PCBContext* context; |
|
45 | QPainterPath path; | |
|
44 | 46 | }; |
|
45 | 47 | |
|
46 | 48 | #endif // PCBVIA_H |
General Comments 0
You need to be logged in to leave comments.
Login now