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;
		}
	}
}
Exemplo n.º 2
0
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);
}