/** * Insert a entity at the end of entities list and updates the * borders of this entity-container if autoUpdateBorders is true. */ void RS_EntityContainer::appendEntity(RS_Entity* entity){ if (!entity) return; entities.append(entity); if (autoUpdateBorders) adjustBorders(entity); }
/** * Recalculates the borders of this entity container including * invisible entities. */ void RS_EntityContainer::forcedCalculateBorders() { //RS_DEBUG->print("RS_EntityContainer::calculateBorders"); resetBorders(); for (RS_Entity* e: entities){ //RS_Layer* layer = e->getLayer(); if (e->isContainer()) { ((RS_EntityContainer*)e)->forcedCalculateBorders(); } else { e->calculateBorders(); } adjustBorders(e); } // needed for correcting corrupt data (PLANS.dxf) if (minV.x>maxV.x || minV.x>RS_MAXDOUBLE || maxV.x>RS_MAXDOUBLE || minV.x<RS_MINDOUBLE || maxV.x<RS_MINDOUBLE) { minV.x = 0.0; maxV.x = 0.0; } if (minV.y>maxV.y || minV.y>RS_MAXDOUBLE || maxV.y>RS_MAXDOUBLE || minV.y<RS_MINDOUBLE || maxV.y<RS_MINDOUBLE) { minV.y = 0.0; maxV.y = 0.0; } //RS_DEBUG->print(" borders: %f/%f %f/%f", minV.x, minV.y, maxV.x, maxV.y); //printf("borders: %lf/%lf %lf/%lf\n", minV.x, minV.y, maxV.x, maxV.y); //RS_Entity::calculateBorders(); }
/** * Adds a entity to this container and updates the borders of this * entity-container if autoUpdateBorders is true. */ void RS_EntityContainer::addEntity(RS_Entity* entity) { /* if (isDocument()) { RS_LayerList* lst = getDocument()->getLayerList(); if (lst) { RS_Layer* l = lst->getActive(); if (l && l->isLocked()) { return; } } } */ if (!entity) return; if (entity->rtti()==RS2::EntityImage || entity->rtti()==RS2::EntityHatch) { entities.prepend(entity); } else { entities.append(entity); } if (autoUpdateBorders) { adjustBorders(entity); } }
/** * Insert a entity at the start of entities list and updates the * borders of this entity-container if autoUpdateBorders is true. */ void RS_EntityContainer::prependEntity(RS_Entity* entity){ if (entity==NULL) return; entities.prepend(entity); if (autoUpdateBorders) adjustBorders(entity); }
/** * Inserts a entity to this container at the given position and updates * the borders of this entity-container if autoUpdateBorders is true. */ void RS_EntityContainer::insertEntity(int index, RS_Entity* entity) { if (!entity) return; entities.insert(index, entity); if (autoUpdateBorders) { adjustBorders(entity); } }
/** * Replaces the entity at the given index with the given entity * and updates the borders of this entity-container if autoUpdateBorders is true. */ void RS_EntityContainer::replaceEntity(int index, RS_Entity* entity) { if (entity==NULL) { return; } entities.replace(index, entity); if (autoUpdateBorders) { adjustBorders(entity); } }
/** * Recalculates the borders of this entity container. */ void RS_EntityContainer::calculateBorders() { RS_DEBUG->print("RS_EntityContainer::calculateBorders"); resetBorders(); for (RS_Entity* e=firstEntity(RS2::ResolveNone); e!=NULL; e=nextEntity(RS2::ResolveNone)) { RS_Layer* layer = e->getLayer(); RS_DEBUG->print("RS_EntityContainer::calculateBorders: " "isVisible: %d", (int)e->isVisible()); if (e->isVisible() && (layer==NULL || !layer->isFrozen())) { e->calculateBorders(); adjustBorders(e); } } RS_DEBUG->print("RS_EntityContainer::calculateBorders: size 1: %f,%f", getSize().x, getSize().y); // needed for correcting corrupt data (PLANS.dxf) if (minV.x>maxV.x || minV.x>RS_MAXDOUBLE || maxV.x>RS_MAXDOUBLE || minV.x<RS_MINDOUBLE || maxV.x<RS_MINDOUBLE) { minV.x = 0.0; maxV.x = 0.0; } if (minV.y>maxV.y || minV.y>RS_MAXDOUBLE || maxV.y>RS_MAXDOUBLE || minV.y<RS_MINDOUBLE || maxV.y<RS_MINDOUBLE) { minV.y = 0.0; maxV.y = 0.0; } RS_DEBUG->print("RS_EntityCotnainer::calculateBorders: size: %f,%f", getSize().x, getSize().y); //RS_DEBUG->print(" borders: %f/%f %f/%f", minV.x, minV.y, maxV.x, maxV.y); //printf("borders: %lf/%lf %lf/%lf\n", minV.x, minV.y, maxV.x, maxV.y); //RS_Entity::calculateBorders(); }