51 lines
2.4 KiB
C++
51 lines
2.4 KiB
C++
#ifndef ELECTRICCONNECTLINEITEM_H
|
|
#define ELECTRICCONNECTLINEITEM_H
|
|
|
|
#include <QPainterPath>
|
|
#include <QUuid>
|
|
#include "graphicsBaseItem.h"
|
|
|
|
class ElectricConnectLineItem : public GraphicsProjectModelItem
|
|
{
|
|
public:
|
|
ElectricConnectLineItem(QGraphicsItem *parent = 0);
|
|
ElectricConnectLineItem(const ElectricConnectLineItem&); //暂不拷贝位置关系,由线自己计算
|
|
virtual ~ElectricConnectLineItem();
|
|
virtual ElectricConnectLineItem* clone() const override;
|
|
|
|
void setStartPoint(const QPointF& p);
|
|
void setEndPoint(const QPointF& p);
|
|
QPainterPath getPoints(void) const { return m_points; }
|
|
|
|
void moveLine(QPointF); //鼠标点击拖动
|
|
void resetCurLine(){_curLine = QPoint();}
|
|
void calculatePath();
|
|
void generateAvoidancePath(const QPointF& start, const QPointF& end,const QList<QRectF>& obstacleShapes); // 使用形状进行避障
|
|
double calculatePathLength(const QList<QPointF>& path);
|
|
bool lineIntersectsRect(const QLineF& line, const QRectF& rect);
|
|
bool isSegmentSafe(const QPointF& p1, const QPointF& p2,const QList<QRectF>& components);
|
|
bool isPathSafe(const QList<QPointF>& path,const QList<QRectF>& components);
|
|
bool segmentPenetratesComponent(const QLineF& segment,const QRectF& component);
|
|
QRectF getTotalComponentsBounds(const QList<QRectF>& components);
|
|
void collectRectilinearPaths(const QPointF& start, const QPointF& end,const QList<QRectF>& components,QMultiMap<double, QList<QPointF>>& paths);
|
|
void addPathIfRectilinear(const QList<QPointF>& path,QMultiMap<double, QList<QPointF>>& paths);
|
|
void collectBypassPaths(const QPointF& start, const QPointF& end,const QList<QRectF>& components,QMultiMap<double, QList<QPointF>>& paths);
|
|
void generateForcedRectilinearBypass(const QPointF& start, const QPointF& end,const QList<QRectF>& components);
|
|
QRectF findFirstBlockingComponent(const QPointF& start, const QPointF& end,const QList<QRectF>& components);
|
|
|
|
virtual QPainterPath shape() const override;
|
|
virtual QRectF boundingRect() const override;
|
|
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
|
|
|
|
protected:
|
|
void initial();
|
|
private:
|
|
QPainterPath m_points;
|
|
QPainterPath m_pointsBoundingRect; //包裹点的矩形集合
|
|
QList<QPointF> m_lstPoints;
|
|
QPoint _curLine; //参数1用点序号表示的当前线段起始点,参数2表示线段方向
|
|
|
|
};
|
|
|
|
#endif
|