Поскольку я не получал никаких ответов overe здесь, я решил покопаться в исходном коде LibreCAD, и нашел это в rs_graphic.cpp:
/**
* Removes invalid objects.
* @return how many objects were removed
*/
int RS_Graphic::clean()
{
// author: ravas
int how_many = 0;
foreach (RS_Entity* e, entities)
{
if (e->getMin().x > e->getMax().x
|| e->getMin().y > e->getMax().y
|| e->getMin().x > RS_MAXDOUBLE
|| e->getMax().x > RS_MAXDOUBLE
|| e->getMin().x < RS_MINDOUBLE
|| e->getMax().x < RS_MINDOUBLE
|| e->getMin().y > RS_MAXDOUBLE
|| e->getMax().y > RS_MAXDOUBLE
|| e->getMin().y < RS_MINDOUBLE
|| e->getMax().y < RS_MINDOUBLE)
{
removeEntity(e);
how_many += 1;
}
}
Приведенный выше код не требует пояснений, и я надеюсь, это помогает любому, кто задает тот же вопрос в будущем.
Я бы проверил линии нулевой длины или дуги нулевого угла, что-то вроде этого ... – abenci