##// END OF EJS Templates
Non working pad rendering.. Rotation issue.
jeandet -
r12:93ef9e74723d default
parent child
Show More
@@ -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 QGraphicsEllipseItem* ellipse = new QGraphicsEllipseItem();
47 QPen pen = ellipse->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 ellipse->setPen(pen);
52 // QBrush brush = ellipse->brush();
53 // brush.setStyle(Qt::SolidPattern);
54 // brush.setColor(context->layerColor(this->viaNode->layers().at(i)));
55 // ellipse->setBrush(brush);
56 QRectF rec(this->viaNode->pos()+offset,QSizeF(this->viaNode->size().width()-thickness,this->viaNode->size().width()-thickness));
57 ellipse->setRect(rec);
58 ellipse->setZValue(-context->layer(viaNode->layers().at(i)));
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