2 #include <QGraphicsEllipseItem>
3 #include <QGraphicsLineItem>
10 #include <QTextStream>
34 : mDir(numberToDirection(idir))
46 mDir = numberToDirection(mDir + 1);
52 mDir = numberToDirection(mDir + 1);
58 int dy = omitEndpoint ? 2 : 1;
108 int dy = abs(other.
y()-
y());
109 int dx = abs(other.
x()-
x());
137 int n = points.
size();
138 for (
int i=1; i<
n; i++)
139 for (
int j=0; j<i; j++)
140 distanceMap.
insert(points.
at(i).distanceTo(points.
at(j)), qMakePair(i,j));
152 while (retval.
size() < points.
size())
154 auto it = distanceMap.
begin();
160 while(it != distanceMap.
end() &&
165 for (
int ipair=0; ipair<2; ipair++)
167 int i = ipair ? it.
value().second : it.value().first;
174 distanceMap.
erase(it);
182 : mPoint(p), mDir(dir), mIsEndpoint(isEnd)
201 return (mPoint==other.mPoint &&
203 mIsEndpoint==other.mIsEndpoint);
208 static const char* cdir =
"LRUD";
214 if (mDir.
isNull())
return nullptr;
242 int dx = pb.
x() - pa.
x();
243 int dy = pb.
y() - pa.
y();
250 waypoint = addWire(waypoint, vdir,
false);
256 for (
int i=0; i<abs(dx); i++)
257 waypoint = addWire(waypoint, hdir,
true);
260 dy = pb.
y() - waypoint.
y();
264 int ysteps = abs(dy) / 2;
265 for (
int i=0; i<ysteps; i++)
266 waypoint = addWire(waypoint, vdir,
true);
271 dy = pb.
y() - waypoint.
y();
273 addWire(waypoint, vdir,
false);
280 int bestDistance = 0;
283 if (testP.isUndefined())
continue;
285 if (retval.
isUndefined() || distance < bestDistance)
287 bestDistance = distance;
293 qDebug() <<
"undefined closest point" << pnt.
x() << pnt.
y();
295 qDebug() << (
QPoint) testP;
296 qDebug() <<
"-----------";
306 if (atomicNet && !w.isHorizontal() && !w.isEndpoint())
316 mWaypointLinks[pA].append(
n);
317 mWaypointLinks[pB].append(
n);
318 mWaypointLinks[pB].append(
n+1);
319 mWaypointLinks[pC].append(
n+1);
334 mWaypointLinks[pnt].append(
n);
336 mWaypointLinks[nextP].append(
n);
342 : mId(
id), mFirst(0), mSecond(0)
350 if (w.isHorizontal())
351 horizontalMap[p.
y()].
insert(p.
x(),0);
355 evaluate(horizontalMap);
356 evaluate(verticalMap);
361 if (mSecond > other.mSecond)
return true;
362 if (mSecond < other.mSecond)
return false;
363 if (mFirst > other.mFirst)
return true;
364 if (mFirst < other.mFirst)
return false;
365 return (mId < other.mId);
372 while (!
set.isEmpty())
375 auto it =
set.begin();
376 int q = it.key() + 1;
378 auto jt =
set.find(q);
379 while (jt !=
set.end())
395 : connection(nullptr), mSources(sources), mDestinations(destinations)
398 mPoints.
append(mDestinations);
408 int n=mPoints.
size();
410 for (
int i=2; i<
n; i++)
415 seedConnection.
add(nextConnection,
false);
424 xout << stub <<
"\n";
441 .
arg(w.isHorizontal()?
'-':
'|');
443 xout <<
"\n===========================\n";
NetLayoutConnectionFactory(const QList< NetLayoutPoint > &sources, const QList< NetLayoutPoint > &destinations)
void dump(const QString &stub) const
NetLayoutConnection * connection
NetLayoutPoint closestPoint(const NetLayoutPoint &pnt) const
void add(const NetLayoutConnection &other, bool atomicNet)
~NetLayoutConnectionMetric()
NetLayoutDirection operator++()
NetLayoutDirection(DirectionType dir=Undefined)
QPoint step(bool omitEndpoint=false) const
DirectionType direction() const
NetLayoutMetric(u32 id, const NetLayoutConnection *con)
bool operator<(const NetLayoutMetric &other) const
static QList< NetLayoutPoint > orderByDistance(const QList< NetLayoutPoint > &points)
NetLayoutPoint nextPoint(const NetLayoutDirection &dir, bool omitEndpoint=false) const
int distanceTo(const NetLayoutPoint &other) const
QGraphicsEllipseItem * graphicsFactory(float r) const
NetLayoutPoint(int x_=INT_MIN, int y_=INT_MIN)
static NetLayoutPoint fromBox(const QPoint &boxPosition, bool isInput)
NetLayoutWire(const NetLayoutPoint &p, const NetLayoutDirection &dir, bool isEnd)
bool isHorizontal() const
NetLayoutPoint endPoint(WirePointType pnt) const
QGraphicsLineItem * graphicsFactory() const
bool operator==(const NetLayoutWire &other) const
uint qHash(const LaneIndex &ri)
QPointF scenePoint(const QPoint &p)
include set(SRCROOT ${CMAKE_CURRENT_SOURCE_DIR}/src) set(UIROOT $
void setPen(const QPen &pen)
void setPen(const QPen &pen)
void append(const T &value)
const T & at(int i) const const
QMap::iterator erase(QMap::iterator pos)
QMap::iterator insert(const Key &key, const T &value)
QList< T > values() const const
typename QMap< Key, T >::iterator insert(const Key &key, const T &value)
bool contains(const T &value) const const
QSet::iterator insert(const T &value)
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const