GeometryHelper.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "GeometryHelper.h"
  2. GeometryHelper::GeometryHelper()
  3. {
  4. }
  5. bool GeometryHelper::isIntersectingEdges(EdgeDescriptor& firstEdge, EdgeDescriptor& secondEdge, SubGraph& gSubgraph)
  6. {
  7. BoostGraphWrapper boostGraphWrapper;
  8. boost::geometry::model::linestring<GeometryPoint> firstLine, secondLine;
  9. //Get x,y coordinates of source and target for firstEdge
  10. int iFirstEdgeSourceX = boostGraphWrapper.getEdgeSourceX(firstEdge, gSubgraph);
  11. int iFirstEdgeSourceY = boostGraphWrapper.getEdgeSourceY(firstEdge, gSubgraph);
  12. int iFirstEdgeTargetX = boostGraphWrapper.getEdgeTargetX(firstEdge, gSubgraph);
  13. int iFirstEdgeTargetY = boostGraphWrapper.getEdgeTargetY(firstEdge, gSubgraph);
  14. //Get x,y coordinates of source and target for secondEdge
  15. int iSecondEdgeSourceX = boostGraphWrapper.getEdgeSourceX(secondEdge, gSubgraph);
  16. int iSecondEdgeSourceY = boostGraphWrapper.getEdgeSourceY(secondEdge, gSubgraph);
  17. int iSecondEdgeTargetX = boostGraphWrapper.getEdgeTargetX(secondEdge, gSubgraph);
  18. int iSecondEdgeTargetY = boostGraphWrapper.getEdgeTargetY(secondEdge, gSubgraph);
  19. //Convert coordinates into string to pass it to geometry linestring
  20. QString sFirstEdgeSourceX = QString::number(iFirstEdgeSourceX);
  21. QString sFirstEdgeSourceY = QString::number(iFirstEdgeSourceY);
  22. QString sFirstEdgeTargetX = QString::number(iFirstEdgeTargetX);
  23. QString sFirstEdgeTargetY = QString::number(iFirstEdgeTargetY);
  24. QString sFirstLine = sFirstEdgeSourceX + " " + sFirstEdgeSourceY +
  25. "," + sFirstEdgeTargetX + " " + sFirstEdgeTargetY;
  26. QString sSecondEdgeSourceX = QString::number(iSecondEdgeSourceX);
  27. QString sSecondEdgeSourceY = QString::number(iSecondEdgeSourceY);
  28. QString sSecondEdgeTargetX = QString::number(iSecondEdgeTargetX);
  29. QString sSecondEdgeTargetY = QString::number(iSecondEdgeTargetY);
  30. QString sSecondLine = sSecondEdgeSourceX + " " + sSecondEdgeSourceY +
  31. "," + sSecondEdgeTargetX + " " + sSecondEdgeTargetY;
  32. //Initialize geometry point and line
  33. boost::geometry::read_wkt("linestring(" + sFirstLine.toStdString() + ")",firstLine);
  34. boost::geometry::read_wkt("linestring(" + sSecondLine.toStdString() + ")",secondLine);
  35. // Check intersection of edges (Geometry)
  36. return boost::geometry::intersects(firstLine, secondLine);
  37. }