diff --git a/qilib/qicadpcb.cpp b/qilib/qicadpcb.cpp --- a/qilib/qicadpcb.cpp +++ b/qilib/qicadpcb.cpp @@ -455,7 +455,7 @@ void QIlib::QIcadPcbLine::setNode(QIlib: QIlib::QIcadPcbModule::QIcadPcbModule(QIlib::AbstractNode *node) - :QIcadAbstractNodeWrapper(node) + :QIcadAbstractNodeWrapper(node),p_angle(0.0) { this->setNode(node); } @@ -467,7 +467,7 @@ const QPointF &QIlib::QIcadPcbModule::po double QIlib::QIcadPcbModule::angle() { - return p_angle; + return - p_angle; } void QIlib::QIcadPcbModule::setNode(QIlib::AbstractNode *node) @@ -498,6 +498,7 @@ void QIlib::QIcadPcbModule::setNode(QIli if(coords.count()==3) { p_angle = coords.at(2).toDouble(); + this->updatePadsAngle(); } } if(node->nodes.at(i)->name==QIlib::Lexique::tags_c) @@ -547,7 +548,7 @@ void QIlib::QIcadPcbModule::apendPad(QIl { if(node->name==QIlib::Lexique::pad_c) { - this->pads.append(new QIcadPcbPad(node)); + this->pads.append(new QIcadPcbPad(node, this->p_angle)); } } @@ -608,6 +609,14 @@ void QIlib::QIcadPcbModule::apendCircle( } } +void QIlib::QIcadPcbModule::updatePadsAngle() +{ + for(int i=0;ipads.count();i++) + { + this->pads.at(i)->setModuleAngle(this->p_angle); + } +} + QIlib::QIcadPcbDimension::QIcadPcbDimension(QIlib::AbstractNode *node) :QIcadAbstractNodeWrapper(node) @@ -864,12 +873,14 @@ void QIlib::QIcadPcbVia::setNode(QIlib:: } -QIlib::QIcadPcbPad::QIcadPcbPad(QIlib::AbstractNode *node) - :QIcadAbstractNodeWrapper(node) +QIlib::QIcadPcbPad::QIcadPcbPad(QIlib::AbstractNode *node, double modAngle) + :QIcadAbstractNodeWrapper(node),p_Mod_angle(modAngle),p_angle(0.0) { this->setNode(node); } + + void QIlib::QIcadPcbPad::setNode(QIlib::AbstractNode *node) { if(node->name==QIlib::Lexique::pad_c) diff --git a/qilib/qicadpcb.h b/qilib/qicadpcb.h --- a/qilib/qicadpcb.h +++ b/qilib/qicadpcb.h @@ -31,7 +31,6 @@ #include namespace QIlib{ - const QPointF nodeTo2DCoords(QIlib::AbstractNode* node); const QSizeF nodeTo2DSize(QIlib::AbstractNode* node); double nodeValueToDouble(QIlib::AbstractNode* node,int index=0); @@ -227,7 +226,7 @@ public: rectangle, circle }padShape; - QIcadPcbPad(QIlib::AbstractNode* node); + QIcadPcbPad(QIlib::AbstractNode* node,double modAngle=0.0); QIcadPcbPad(){} QIcadAbstractNodeWrapper at; QIcadAbstractNodeWrapper sizeNode; @@ -238,7 +237,8 @@ public: const QSizeF& size(){return p_size;} const QPointF& pos(){return p_pos;} double drill(){return p_drill;} - double angle(){return p_angle;} + void setModuleAngle(double modAngle){p_Mod_angle= modAngle;} + double angle(){return - (p_angle - p_Mod_angle);} padShape shape(){return p_shape;} int padNumber(){return p_padNumber;} void setNode(QIlib::AbstractNode* node); @@ -247,6 +247,9 @@ private: padShape p_shape; double p_drill; double p_angle; + // Dirty fix to transform pad angle from + // PCB coordinates to Module coordinates + double p_Mod_angle; QSizeF p_size; QPointF p_pos; QStringList p_layers; @@ -306,6 +309,7 @@ public: void clrCircles(); void apendCircle(QIlib::AbstractNode* node); private: + void updatePadsAngle(); QPointF p_pos; double p_angle; };