void frgExtractTopologicalEntsFromLinesAlgm::_addto_rtree(Vertex2dsOnSegment2d &stru) { const AcGeLineSeg2d &seg = stru.seg; std::map<double, rlVertex2d *, rl_double_sort1> &vertices = stru.vertex2ds; std::map<double, rlVertex2d *, rl_double_sort1>::iterator it = vertices.begin(); AcGePoint2d base = seg.startPoint(); AcGeVector2d dir = seg.direction(); for (; it != vertices.end(); ++it) { AcGePoint2d pnt = base; pnt.transformBy(dir * it->first); Point_2d _pnt(pnt.x, pnt.y); rlId id = 0; if (_is_in_rtree(id, _pnt)) { it->second = _topologies->get<rlVertex2d *>(id); assert(it->second); } else { rlVertex2d *_v = _topologies->_new<rlVertex2d>(); _v->set_x(_pnt.get<0>()); _v->set_y(_pnt.get<1>()); Point2d_Id _pair(_pnt, _v->id()); _rtree.insert(_pair); it->second = _v; } } }
inline void doDispatch( const PVal &val1, const PVal &val2, const PVal &self, const PMaybe &lib, PMaybe &tunnel ) { PMaybe vlib1(nullptr); PMaybe vlib2(nullptr); PMaybe func(nullptr); libGet<id_dispatch>(val1, lib, vlib1); libGet<id_dispatch>(val2, vlib1, vlib2); libGet(self, vlib2, func); func.call(_pair(_quote(val1), _quote(val2), self->getType()), lib, tunnel); }