diff --git a/libs/blockview/blockbusitem.cpp b/libs/blockview/blockbusitem.cpp index 7a209e3..42c8f6b 100644 --- a/libs/blockview/blockbusitem.cpp +++ b/libs/blockview/blockbusitem.cpp @@ -315,6 +315,24 @@ QList 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; diff --git a/libs/blockview/blockbusitem.h b/libs/blockview/blockbusitem.h index ded1dc4..ef76f97 100644 --- a/libs/blockview/blockbusitem.h +++ b/libs/blockview/blockbusitem.h @@ -33,6 +33,17 @@ public: BlockBusItem(bool temp = false); 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;} @@ -66,6 +77,7 @@ public: bool isBusSelected() const {return selSegment >= 0 || selPoint >= 0;} QList connectedBlocks() const; QList 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 * segs = 0) const;