void SPConnEndPair::reroutePath(void) { if (!isAutoRoutingConn()) { // Do nothing return; } SPCurve *curve = _path->curve; Geom::Point endPt[2]; getEndpoints(endPt); Avoid::Point src(endPt[0][Geom::X], endPt[0][Geom::Y]); Avoid::Point dst(endPt[1][Geom::X], endPt[1][Geom::Y]); _connRef->updateEndPoint(Avoid::VertID::src, src); _connRef->updateEndPoint(Avoid::VertID::tar, dst); _connRef->generatePath(src, dst); Avoid::PolyLine route = _connRef->route(); _connRef->calcRouteDist(); curve->reset(); curve->moveto(endPt[0]); for (int i = 1; i < route.pn; ++i) { Geom::Point p(route.ps[i].x, route.ps[i].y); curve->lineto(p); } }
bool SPConnEndPair::reroutePathFromLibavoid(void) { if (!isAutoRoutingConn()) { // Do nothing return false; } SPCurve *curve = _path->original_curve ?_path->original_curve : _path->curve; recreateCurve( curve, _connRef, _connCurvature ); Geom::Matrix doc2item = sp_item_i2doc_affine(SP_ITEM(_path)).inverse(); curve->transform(doc2item); return true; }
void SPConnEndPair::tellLibavoidNewEndpoints(const bool processTransaction) { if (!isAutoRoutingConn()) { // Do nothing return; } makePathInvalid(); Geom::Point endPt[2]; getEndpoints(endPt); Avoid::Point src(endPt[0][Geom::X], endPt[0][Geom::Y]); Avoid::Point dst(endPt[1][Geom::X], endPt[1][Geom::Y]); _connRef->setEndpoints(src, dst); if (processTransaction) { _connRef->router()->processTransaction(); } return; }