Skip to content

Commit

Permalink
Fix Transformation copy constructor (#12180)
Browse files Browse the repository at this point in the history
Fixes #12165
Copy extent center in the copy constructor.
Set extent center when creating the component.
  • Loading branch information
adeas31 committed Apr 2, 2024
1 parent 3ffcc55 commit a7d11a8
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 6 deletions.
14 changes: 8 additions & 6 deletions OMEdit/OMEditLIB/Element/Element.cpp
Expand Up @@ -538,24 +538,26 @@ Element::Element(ModelInstance::Component *pModelComponent, bool inherited, Grap
// transformation
mTransformation = Transformation(mpGraphicsView->getViewType(), this);
if (createTransformation) {
if (boundingRect().width() > 0) {
mTransformation.setWidth(boundingRect().width());
QRectF boundingRectangle = boundingRect();
if (boundingRectangle.width() > 0) {
mTransformation.setWidth(boundingRectangle.width());
}
if (boundingRect().height() > 0) {
mTransformation.setHeight(boundingRect().height());
if (boundingRectangle.height() > 0) {
mTransformation.setHeight(boundingRectangle.height());
}
// snap to grid while creating component
position = mpGraphicsView->snapPointToGrid(position);
mTransformation.setOrigin(position);
ModelInstance::CoordinateSystem coordinateSystem = getCoOrdinateSystemNew();
qreal initialScale = coordinateSystem.getInitialScale();
QVector<QPointF> extent;
qreal xExtent = initialScale * boundingRect().width() / 2;
qreal yExtent = initialScale * boundingRect().height() / 2;
qreal xExtent = initialScale * boundingRectangle.width() / 2;
qreal yExtent = initialScale * boundingRectangle.height() / 2;
extent.append(QPointF(-xExtent, -yExtent));
extent.append(QPointF(xExtent, yExtent));
mTransformation.setExtent(extent);
mTransformation.setRotateAngle(0.0);
mTransformation.setExtentCenter(boundingRectangle.center());
} else if (!placementAnnotation.isEmpty()) {
mTransformation.parseTransformationString(placementAnnotation, boundingRect().width(), boundingRect().height());
} else {
Expand Down
16 changes: 16 additions & 0 deletions OMEdit/OMEditLIB/Element/Transformation.cpp
Expand Up @@ -257,11 +257,13 @@ void Transformation::updateTransformation(const Transformation &transformation)
mExtentDiagram = transformation.getExtentDiagram();
mRotateAngleDiagram = transformation.getRotateAngleDiagram();
mPositionDiagram = transformation.getPositionDiagram();
mExtentCenterDiagram = transformation.getExtentCenterDiagram();
mVisibleIcon = transformation.getVisibleIcon();
mOriginIcon = transformation.getOriginIcon();
mExtentIcon = transformation.getExtentIcon();
mRotateAngleIcon = transformation.getRotateAngleIcon();
mPositionIcon = transformation.getPositionIcon();
mExtentCenterIcon = transformation.getExtentCenterIcon();
}

QTransform Transformation::getTransformationMatrix()
Expand Down Expand Up @@ -328,6 +330,20 @@ QPointF Transformation::getPosition()
}
}

void Transformation::setExtentCenter(QPointF extentCenter)
{
switch (mViewType) {
case StringHandler::Icon:
setExtentCenterIcon(extentCenter);
break;
case StringHandler::Diagram:
case StringHandler::ModelicaText:
default:
setExtentCenterDiagram(extentCenter);
break;
}
}

bool Transformation::operator==(const Transformation &transformation) const
{
return (transformation.getVisible() == this->getVisible()) &&
Expand Down
5 changes: 5 additions & 0 deletions OMEdit/OMEditLIB/Element/Transformation.h
Expand Up @@ -67,6 +67,7 @@ class Transformation
void setRotateAngle(qreal rotateAngle);
RealAnnotation getRotateAngle() const;
QPointF getPosition();
void setExtentCenter(QPointF extentCenter);
// operator overloading
bool operator==(const Transformation &transformation) const;
private:
Expand Down Expand Up @@ -101,6 +102,8 @@ class Transformation
void setRotateAngleDiagram(qreal rotateAngle) {mRotateAngleDiagram = rotateAngle;}
const RealAnnotation &getRotateAngleDiagram() const {return mRotateAngleDiagram;}
QPointF getPositionDiagram() const;
void setExtentCenterDiagram(QPointF extentCenter) {mExtentCenterDiagram = extentCenter;}
QPointF getExtentCenterDiagram() const {return mExtentCenterDiagram;}
QTransform getTransformationMatrixIcon();
void adjustPositionIcon(qreal x, qreal y);
void setOriginIcon(QPointF origin);
Expand All @@ -110,6 +113,8 @@ class Transformation
void setRotateAngleIcon(qreal rotateAngle) {mRotateAngleIcon = rotateAngle;}
const RealAnnotation &getRotateAngleIcon() const {return mRotateAngleIcon;}
QPointF getPositionIcon() const;
void setExtentCenterIcon(QPointF extentCenter) {mExtentCenterIcon = extentCenter;}
QPointF getExtentCenterIcon() const {return mExtentCenterIcon;}
};

#endif // TRANSFORMATION_H

0 comments on commit a7d11a8

Please sign in to comment.