# HG changeset patch # User Alexis Jeandet # Date 2015-06-19 15:20:06 # Node ID 93ef9e74723d211756f5ef45bd57a5a717a42e25 # Parent 10ac2f44ce26fa88540967392c7f3f02c78e2448 Non working pad rendering.. Rotation issue. diff --git a/qilib/qicadpcb.cpp b/qilib/qicadpcb.cpp --- a/qilib/qicadpcb.cpp +++ b/qilib/qicadpcb.cpp @@ -886,7 +886,7 @@ void QIlib::QIcadPcbPad::setNode(QIlib:: { this->p_shape = circle; } - + this->p_padNumber = nodeValueToInt(node,0); } for(int i=0;inodes.count();i++) { @@ -894,6 +894,7 @@ void QIlib::QIcadPcbPad::setNode(QIlib:: { this->at.setNode(node->nodes.at(i)); this->p_pos = nodeTo2DCoords(node->nodes.at(i)); + this->p_angle = nodeValueToDouble(node->nodes.at(i),2); } if(node->nodes.at(i)->name==QIlib::Lexique::size_c) { diff --git a/qilib/qicadpcb.h b/qilib/qicadpcb.h --- a/qilib/qicadpcb.h +++ b/qilib/qicadpcb.h @@ -238,11 +238,15 @@ public: const QSizeF& size(){return p_size;} const QPointF& pos(){return p_pos;} double drill(){return p_drill;} + double angle(){return p_angle;} padShape shape(){return p_shape;} + int padNumber(){return p_padNumber;} void setNode(QIlib::AbstractNode* node); private: + int p_padNumber; padShape p_shape; double p_drill; + double p_angle; QSizeF p_size; QPointF p_pos; QStringList p_layers; diff --git a/test/PCBView/mainwindow.cpp b/test/PCBView/mainwindow.cpp --- a/test/PCBView/mainwindow.cpp +++ b/test/PCBView/mainwindow.cpp @@ -24,6 +24,7 @@ #include "pcbmodule.h" #include "pcbline.h" #include "pcbvia.h" +#include MainWindow::MainWindow(QWidget *parent) : @@ -32,36 +33,11 @@ MainWindow::MainWindow(QWidget *parent) { ui->setupUi(this); this->p_scene = new QGraphicsScene(); - this->p_scene->setSceneRect(0, 0, 500, 200); - this->context = new PCBContext(); this->ui->graphicsView->setScene(this->p_scene); - QIlib::QIcadPcb pcbDriver; -// pcbDriver.parsePcb("/opt/kicadTools/test/testFiles/pcb2.kicad_pcb"); -// pcbDriver.parsePcb("/home/jeandet/Documents/PCB/ADC_STAMP/ADC_STAMP.kicad_pcb"); - pcbDriver.parsePcb("/usr/share/kicad/demos/video/video.kicad_pcb"); -// pcbDriver.parsePcb("/usr/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.kicad_pcb"); - for(int i=0;ilayers.layers.count();i++) - { - this->context->addlayer(pcbDriver.pcbRoot->layers.layers.at(i)->name(),pcbDriver.pcbRoot->layers.layers.at(i)->index()); - } - for(int i=0;imodules.count();i++) - { - this->p_scene->addItem(new PCBModule(pcbDriver.pcbRoot->modules.at(i),this->context)); - } - for(int i=0;ilines.count();i++) - { - this->p_scene->addItem(new PCBLine((QIlib::QIcadAbstractPcbLine*)pcbDriver.pcbRoot->lines.at(i),this->context)); - } - for(int i=0;isegments.count();i++) - { - this->p_scene->addItem(new PCBLine((QIlib::QIcadAbstractPcbLine*)pcbDriver.pcbRoot->segments.at(i),this->context)); - } - for(int i=0;ivias.count();i++) - { - this->p_scene->addItem(new PCBVia(pcbDriver.pcbRoot->vias.at(i),this->context)); - } + this->pcbDriver =NULL; connect(this->ui->actionRedraw,SIGNAL(triggered(bool)),this,SLOT(redraw())); + connect(this->ui->actionOpen,SIGNAL(triggered(bool)),this,SLOT(openFile())); } MainWindow::~MainWindow() @@ -74,6 +50,15 @@ void MainWindow::redraw() this->p_scene->update(); } +void MainWindow::openFile() +{ + QString file = QFileDialog::getOpenFileName(this,tr("Open kicad PCB file"), + "", + tr("PCB file (*.kicad_pcb)")); + if(QFile::exists(file)) + loadFile(file); +} + void MainWindow::changeEvent(QEvent *e) { QMainWindow::changeEvent(e); @@ -85,3 +70,36 @@ void MainWindow::changeEvent(QEvent *e) break; } } + +void MainWindow::loadFile(const QString &file) +{ + this->p_scene->setSceneRect(0, 0, 500, 200); + if(pcbDriver!=NULL)delete pcbDriver; + pcbDriver = new QIlib::QIcadPcb(); + this->context->clear(); + this->p_scene->clear(); +// pcbDriver.parsePcb("/opt/kicadTools/test/testFiles/pcb2.kicad_pcb"); +// pcbDriver.parsePcb("/home/jeandet/Documents/PCB/ADC_STAMP/ADC_STAMP.kicad_pcb"); + pcbDriver->parsePcb(file); +// pcbDriver.parsePcb("/usr/share/kicad/demos/kit-dev-coldfire-xilinx_5213/kit-dev-coldfire-xilinx_5213.kicad_pcb"); + for(int i=0;ipcbRoot->layers.layers.count();i++) + { + this->context->addlayer(pcbDriver->pcbRoot->layers.layers.at(i)->name(),pcbDriver->pcbRoot->layers.layers.at(i)->index()); + } + for(int i=0;ipcbRoot->modules.count();i++) + { + this->p_scene->addItem(new PCBModule(pcbDriver->pcbRoot->modules.at(i),this->context)); + } + for(int i=0;ipcbRoot->lines.count();i++) + { + this->p_scene->addItem(new PCBLine((QIlib::QIcadAbstractPcbLine*)pcbDriver->pcbRoot->lines.at(i),this->context)); + } + for(int i=0;ipcbRoot->segments.count();i++) + { + this->p_scene->addItem(new PCBLine((QIlib::QIcadAbstractPcbLine*)pcbDriver->pcbRoot->segments.at(i),this->context)); + } + for(int i=0;ipcbRoot->vias.count();i++) + { + this->p_scene->addItem(new PCBVia(pcbDriver->pcbRoot->vias.at(i),this->context)); + } +} diff --git a/test/PCBView/mainwindow.h b/test/PCBView/mainwindow.h --- a/test/PCBView/mainwindow.h +++ b/test/PCBView/mainwindow.h @@ -45,13 +45,16 @@ public: public slots: void redraw(); + void openFile(); protected: void changeEvent(QEvent *e); private: + void loadFile(const QString& file); Ui::MainWindow *ui; QGraphicsScene* p_scene; PCBContext* context; + QIlib::QIcadPcb* pcbDriver; }; #endif // MAINWINDOW_H diff --git a/test/PCBView/pcbcontext.cpp b/test/PCBView/pcbcontext.cpp --- a/test/PCBView/pcbcontext.cpp +++ b/test/PCBView/pcbcontext.cpp @@ -71,3 +71,9 @@ const QString PCBContext::layer(int numb return layers_map.key(number); } +void PCBContext::clear() +{ + this->layers_colors.clear(); + this->layers_map.clear(); +} + diff --git a/test/PCBView/pcbcontext.h b/test/PCBView/pcbcontext.h --- a/test/PCBView/pcbcontext.h +++ b/test/PCBView/pcbcontext.h @@ -36,6 +36,7 @@ public: const QColor& layerColor(const QString& name); const QColor& layerColor(int number); const QString layer(int number); + void clear(); signals: public slots: diff --git a/test/PCBView/pcbrectpad.cpp b/test/PCBView/pcbrectpad.cpp --- a/test/PCBView/pcbrectpad.cpp +++ b/test/PCBView/pcbrectpad.cpp @@ -42,9 +42,11 @@ void PCBRectPad::init( QPointF offset) offset-=QPointF(this->padNode->size().width()/2,this->padNode->size().height()/2); if(this->padNode->shape()==QIlib::QIcadPcbPad::rectangle) { + QRectF rec(this->padNode->pos()+offset,this->padNode->size()); for(int i=0;ipadNode->layers().count();i++) { QGraphicsRectItem* rect = new QGraphicsRectItem(); + rect->setTransformOriginPoint(rec.center()); QPen pen = rect->pen(); pen.setWidthF(0.01); rect->setPen(pen); @@ -52,11 +54,17 @@ void PCBRectPad::init( QPointF offset) brush.setStyle(Qt::SolidPattern); brush.setColor(context->layerColor(this->padNode->layers().at(i))); rect->setBrush(brush); - QRectF rec(this->padNode->pos()+offset,this->padNode->size()); rect->setRect(rec); rect->setZValue(-context->layer(padNode->layers().at(i))); + rect->setRotation(padNode->angle()); this->addToGroup(rect); } + QGraphicsTextItem* text=new QGraphicsTextItem(QString::number(padNode->padNumber())); + text->setPos(rec.center()); + text->setScale(0.01); + text->setZValue(1); + this->addToGroup(text); + } if(this->padNode->shape()==QIlib::QIcadPcbPad::circle) { diff --git a/test/PCBView/pcbvia.cpp b/test/PCBView/pcbvia.cpp --- a/test/PCBView/pcbvia.cpp +++ b/test/PCBView/pcbvia.cpp @@ -37,26 +37,29 @@ PCBVia::PCBVia(QIlib::QIcadPcbVia *viaNo void PCBVia::init(QPointF offset) { + this->path.addEllipse(this->viaNode->pos(),this->viaNode->size().width()/2,this->viaNode->size().height()/2); + double thickness = (this->viaNode->size().width()-this->viaNode->drill())/2; + this->path.addEllipse(this->viaNode->pos(),(this->viaNode->size().width()/2)-thickness,(this->viaNode->size().height()/2)-thickness); this->setCacheMode(QGraphicsItem::DeviceCoordinateCache); this->setFlags(ItemIsMovable|ItemIsSelectable|ItemIsFocusable); offset-=QPointF(this->viaNode->size().width()/2,this->viaNode->size().height()/2); for(int i=0;iviaNode->layers().count();i++) { - QGraphicsEllipseItem* ellipse = new QGraphicsEllipseItem(); - QPen pen = ellipse->pen(); - double thickness = (this->viaNode->size().width()-this->viaNode->drill())/2; - pen.setWidthF(thickness); + QGraphicsPathItem* pathitem = new QGraphicsPathItem(); + QPen pen = pathitem->pen(); + pen.setWidthF(0.01); - ellipse->setPen(pen); -// QBrush brush = ellipse->brush(); -// brush.setStyle(Qt::SolidPattern); -// brush.setColor(context->layerColor(this->viaNode->layers().at(i))); -// ellipse->setBrush(brush); - QRectF rec(this->viaNode->pos()+offset,QSizeF(this->viaNode->size().width()-thickness,this->viaNode->size().width()-thickness)); - ellipse->setRect(rec); - ellipse->setZValue(-context->layer(viaNode->layers().at(i))); - this->addToGroup(ellipse); + pathitem->setPen(pen); + QBrush brush = pathitem->brush(); + brush.setStyle(Qt::SolidPattern); + brush.setColor(context->layerColor(this->viaNode->layers().at(i))); + pathitem->setBrush(brush); +// QRectF rec(this->viaNode->pos()+offset,QSizeF(this->viaNode->size().width()-thickness,this->viaNode->size().width()-thickness)); +// pathitem->setRect(rec); + pathitem->setZValue(-context->layer(viaNode->layers().at(i))); + pathitem->setPath(path); + this->addToGroup(pathitem); } setOpacity(0.6); diff --git a/test/PCBView/pcbvia.h b/test/PCBView/pcbvia.h --- a/test/PCBView/pcbvia.h +++ b/test/PCBView/pcbvia.h @@ -27,6 +27,7 @@ #include #include #include +#include class PCBVia: public QGraphicsItemGroup { @@ -41,6 +42,7 @@ private: QRectF size; QList layers; PCBContext* context; + QPainterPath path; }; #endif // PCBVIA_H