новый файл: CMakeLists.txt
новый файл: shell.nix новый файл: src/MainWindow.cpp новый файл: src/MainWindow.h новый файл: src/items/ArrowItem.cpp новый файл: src/items/ArrowItem.h новый файл: src/items/BlockItem.cpp новый файл: src/items/BlockItem.h новый файл: src/items/DiagramScene.cpp новый файл: src/items/DiagramScene.h новый файл: src/items/JunctionItem.cpp новый файл: src/items/JunctionItem.h новый файл: src/main.cpp изменено: src/items/ArrowItem.cpp изменено: src/items/ArrowItem.h изменено: src/items/BlockItem.h изменено: src/items/DiagramScene.cpp изменено: src/items/DiagramScene.h
This commit is contained in:
commit
53afa3f728
87 changed files with 48249 additions and 0 deletions
47
src/items/JunctionItem.cpp
Normal file
47
src/items/JunctionItem.cpp
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#include "JunctionItem.h"
|
||||
#include "ArrowItem.h"
|
||||
|
||||
#include <QPainter>
|
||||
#include <QStyleOptionGraphicsItem>
|
||||
#include <cmath>
|
||||
|
||||
JunctionItem::JunctionItem(QGraphicsItem* parent, int id)
|
||||
: QGraphicsObject(parent),
|
||||
m_id(id)
|
||||
{
|
||||
setFlags(ItemIsMovable | ItemIsSelectable | ItemSendsGeometryChanges);
|
||||
setZValue(1); // slightly above arrows
|
||||
}
|
||||
|
||||
QRectF JunctionItem::boundingRect() const {
|
||||
return QRectF(-m_radius - 2, -m_radius - 2, (m_radius + 2) * 2, (m_radius + 2) * 2);
|
||||
}
|
||||
|
||||
void JunctionItem::paint(QPainter* p, const QStyleOptionGraphicsItem*, QWidget*) {
|
||||
p->setRenderHint(QPainter::Antialiasing, true);
|
||||
p->setPen(Qt::NoPen);
|
||||
p->setBrush(isSelected() ? QColor(40, 100, 255) : QColor(30, 30, 30));
|
||||
p->drawEllipse(QPointF(0, 0), m_radius, m_radius);
|
||||
}
|
||||
|
||||
void JunctionItem::addArrow(ArrowItem* a) {
|
||||
m_arrows.insert(a);
|
||||
}
|
||||
|
||||
void JunctionItem::removeArrow(ArrowItem* a) {
|
||||
m_arrows.remove(a);
|
||||
}
|
||||
|
||||
bool JunctionItem::hitTest(const QPointF& scenePos, qreal radius) const {
|
||||
const QPointF local = mapFromScene(scenePos);
|
||||
return std::hypot(local.x(), local.y()) <= radius;
|
||||
}
|
||||
|
||||
QVariant JunctionItem::itemChange(GraphicsItemChange change, const QVariant& value) {
|
||||
if (change == ItemPositionHasChanged || change == ItemTransformHasChanged) {
|
||||
for (ArrowItem* a : m_arrows) {
|
||||
if (a) a->updatePath();
|
||||
}
|
||||
}
|
||||
return QGraphicsObject::itemChange(change, value);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue