BlockBusItem::PointInfo and BlockBusItem::pointInfo()

This commit is contained in:
2022-07-20 20:44:51 +03:00
parent 1eea9eb386
commit b6ebddb54e
2 changed files with 32 additions and 2 deletions

View File

@@ -315,6 +315,24 @@ QList<BlockItemPin * > BlockBusItem::connectedPins() const {
}
BlockBusItem::PointInfo BlockBusItem::pointInfo(QPointF pos) const {
PointInfo ret;
int pi = -1, si = -1;
testPoint(pos, &pi, & si);
if (pi < 0 && si < 0) return ret;
if (si >= 0) {
ret.type = PointInfo::tSegment;
} else {
if (endpoints().contains(pi)) {
ret.type = PointInfo::tEndpoint;
ret.pin = connections_.value(pi, nullptr);
} else
ret.type = PointInfo::tNode;
}
return ret;
}
void BlockBusItem::setBusState(bool state) {
int s = state ? 1 : 0;
if (state_ == s) return;
@@ -481,7 +499,7 @@ int BlockBusItem::neighborSegmentPoint(int point, int * seg) const {
}
void BlockBusItem::testPoint(QPointF pos, int * sel_point, int * sel_segment, bool for_trace) {
void BlockBusItem::testPoint(QPointF pos, int * sel_point, int * sel_segment, bool for_trace) const {
for (int i = 0; i < pol.size(); ++i) {
if ((pol[i] - pos).manhattanLength() <= (for_trace ? 5. : 10.)) { // Point
*sel_point = i;

View File

@@ -34,6 +34,17 @@ public:
BlockBusItem(const BlockBusItem & other);
~BlockBusItem() {;}
struct QAD_BLOCKVIEW_EXPORT PointInfo {
enum Type {
tNone,
tNode, // point > 2 segments
tEndpoint,
tSegment
};
Type type = tNone;
BlockItemPin * pin = nullptr; // if tEndpoint and pin connected
};
void setGridStep(double gs) {grid_step = gs;}
void setEndpointsNumber(int num) {max_ep = num;}
void setImages(const QImage & bus, const QImage & end = QImage()) {im_bus = bus; im_end = end; update();}
@@ -66,6 +77,7 @@ public:
bool isBusSelected() const {return selSegment >= 0 || selPoint >= 0;}
QList<BlockItem * > connectedBlocks() const;
QList<BlockItemPin * > connectedPins() const;
PointInfo pointInfo(QPointF pos) const;
void setBusState(bool state);
bool busState() const {return state_ > 0;}
@@ -86,7 +98,7 @@ protected:
void updateGeometry();
bool checkDelete();
void emitAction(BlockItemBase::Action a);
void testPoint(QPointF pos, int * sel_point, int * sel_segment, bool for_trace = false);
void testPoint(QPointF pos, int * sel_point, int * sel_segment, bool for_trace = false) const;
int addPoint(const QPointF & point, bool update = true);
int segmentPointPair(int point, int * seg = 0) const;
int pointSegmentsCount(int point, QList<int> * segs = 0) const;