// build a vertical line: draw it and check for alignment void SceneGridHandler::buildLineX(qreal deltaX , qreal pointX, qreal correctionX, qreal &myX1, qreal &myX2) { if (deltaX > radius) { return; } if (mShowAlignment) { drawLineX(pointX); } if (makeJumpX(deltaX, pointX - correctionX)) { myX1 = recalculateX1(); myX2 = recalculateX2(myX1); } }
/*! Compute the X-axis scanlines intersections of a polygon. \param polygon : Polygon composed by an array of lines. \param ID : ID of the polygon (has to be know when using queries). \param scanlines : Resulting intersections. */ void vpMbScanLine::drawPolygonX(const std::vector<std::pair<vpPoint, unsigned int> > &polygon, const int ID, std::vector<std::vector<vpMbScanLineSegment> > &scanlines) { if (polygon.size() < 2) return; if (polygon.size() == 2) { vpColVector p1, p2; createVectorFromPoint(polygon.front().first, p1, K); createVectorFromPoint(polygon.back().first, p2, K); drawLineX(p1, p2, makeMbScanLineEdge(polygon.front().first, polygon.back().first), ID, scanlines); return; } std::vector<std::vector<vpMbScanLineSegment> > local_scanlines; local_scanlines.resize(w); for(size_t i = 0 ; i < polygon.size() ; ++i) { vpColVector p1, p2; createVectorFromPoint(polygon[i].first, p1, K); createVectorFromPoint(polygon[(i + 1) % polygon.size()].first, p2, K); drawLineX(p1, p2, makeMbScanLineEdge(polygon[i].first, polygon[(i + 1) % polygon.size()].first), ID, local_scanlines); } createScanLinesFromLocals(scanlines,local_scanlines,w); }