renderArea
::renderArea(QWidget *parent
): {
scene->setSceneRect(0, 0, 850, 480);
setScene(scene);
setCacheMode(CacheBackground);
setViewportUpdateMode(BoundingRectViewportUpdate);
setTransformationAnchor(AnchorUnderMouse);
scale(qreal(1.0), qreal(1.0));
setMinimumSize(400, 400);
}
{
updateList(p);
}
void renderArea
::updateList(const QPoint &p
) {
Point point;
point.point = p;
point.isSelected = false;
list.append(point);
if (list.size() > 1)
updateClothoid(list[list.size()-2].point, list[list.size()-1].point);
}
void renderArea
::updateClothoid(const QPoint &p1,
const QPoint &p2
) {
Clothoid *temp = new Clothoid(p1, p2);
clothoids.append(temp);
scene->addItem(temp);
}
renderArea::renderArea(QWidget *parent):
QGraphicsView(parent)
{
scene = new QGraphicsScene(this);
scene->setItemIndexMethod(QGraphicsScene::NoIndex);
scene->setSceneRect(0, 0, 850, 480);
setScene(scene);
setCacheMode(CacheBackground);
setViewportUpdateMode(BoundingRectViewportUpdate);
setRenderHint(QPainter::Antialiasing);
setTransformationAnchor(AnchorUnderMouse);
scale(qreal(1.0), qreal(1.0));
setMinimumSize(400, 400);
}
void renderArea::mousePressEvent(QMouseEvent *event)
{
QPoint p = event->pos();
updateList(p);
}
void renderArea::updateList(const QPoint &p)
{
Point point;
point.point = p;
point.isSelected = false;
list.append(point);
if (list.size() > 1)
updateClothoid(list[list.size()-2].point, list[list.size()-1].point);
}
void renderArea::updateClothoid(const QPoint &p1, const QPoint &p2)
{
Clothoid *temp = new Clothoid(p1, p2);
clothoids.append(temp);
scene->addItem(temp);
}
To copy to clipboard, switch view to plain text mode
{
sPoint = startPoint;
ePoint = endPoint;
startCurvature = 0.0;
endCurvature = 0.0;
clothoidLength = sqrt(pow(endPoint.x() - startPoint.x(),2) +
pow(endPoint.y() - startPoint.y(),2));
}
QRectF Clothoid
::boundingRect() const {
qreal penWidth = 1;
if ((sPoint.x() < ePoint.x()) && (sPoint.y() < ePoint.y()))
return QRectF(sPoint.
x(), sPoint.
y(), ePoint.
x() - sPoint.
x(), ePoint.
y()-sPoint.
y()) .normalized()
.adjusted(-penWidth, -penWidth, penWidth, penWidth);
if ((sPoint.x() < ePoint.x()) && (sPoint.y() > ePoint.y()))
return QRectF(sPoint.
x(), ePoint.
y(), ePoint.
x() - sPoint.
x(), sPoint.
y() - ePoint.
y()) .normalized()
.adjusted(-penWidth, -penWidth, penWidth, penWidth);
if ((sPoint.x() > ePoint.x()) && (sPoint.y() < ePoint.y()))
return QRectF(ePoint.
x(), sPoint.
y(), sPoint.
x() - ePoint.
x(), ePoint.
y()-sPoint.
y()) .normalized()
.adjusted(-penWidth, -penWidth, penWidth, penWidth);
if ((sPoint.x() > ePoint.x()) && (sPoint.y() > ePoint.y()))
return QRectF(ePoint.
x(), ePoint.
y(), sPoint.
x() - ePoint.
x(), sPoint.
y() - ePoint.
y()) .normalized()
.adjusted(-penWidth, -penWidth, penWidth, penWidth);
}
{
// Draw the line itself
painter
->setPen
(QPen(Qt
::black,
1, Qt
::SolidLine, Qt
::RoundCap, Qt
::RoundJoin));
painter->drawLine(line);
}
Clothoid::Clothoid(QPoint startPoint, QPoint endPoint)
{
sPoint = startPoint;
ePoint = endPoint;
startCurvature = 0.0;
endCurvature = 0.0;
clothoidLength = sqrt(pow(endPoint.x() - startPoint.x(),2) +
pow(endPoint.y() - startPoint.y(),2));
}
QRectF Clothoid::boundingRect() const
{
qreal penWidth = 1;
if ((sPoint.x() < ePoint.x()) && (sPoint.y() < ePoint.y()))
return QRectF(sPoint.x(), sPoint.y(), ePoint.x() - sPoint.x(), ePoint.y()-sPoint.y())
.normalized()
.adjusted(-penWidth, -penWidth, penWidth, penWidth);
if ((sPoint.x() < ePoint.x()) && (sPoint.y() > ePoint.y()))
return QRectF(sPoint.x(), ePoint.y(), ePoint.x() - sPoint.x(), sPoint.y() - ePoint.y())
.normalized()
.adjusted(-penWidth, -penWidth, penWidth, penWidth);
if ((sPoint.x() > ePoint.x()) && (sPoint.y() < ePoint.y()))
return QRectF(ePoint.x(), sPoint.y(), sPoint.x() - ePoint.x(), ePoint.y()-sPoint.y())
.normalized()
.adjusted(-penWidth, -penWidth, penWidth, penWidth);
if ((sPoint.x() > ePoint.x()) && (sPoint.y() > ePoint.y()))
return QRectF(ePoint.x(), ePoint.y(), sPoint.x() - ePoint.x(), sPoint.y() - ePoint.y())
.normalized()
.adjusted(-penWidth, -penWidth, penWidth, penWidth);
return QRectF();
}
void Clothoid::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
QLineF line(sPoint, ePoint);
// Draw the line itself
painter->setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
painter->drawLine(line);
}
To copy to clipboard, switch view to plain text mode
Bookmarks