/** * Implementation of update. Updates the arrow. */ void RS_Leader::update() { // find and delete arrow: for(auto e: entities){ if (e->rtti()==RS2::EntitySolid) { removeEntity(e); break; } } if (isUndone()) { return; } RS_Entity* fe = firstEntity(); if (fe && fe->isAtomic()) { RS_Vector p1 = ((RS_AtomicEntity*)fe)->getStartpoint(); RS_Vector p2 = ((RS_AtomicEntity*)fe)->getEndpoint(); // first entity must be the line which gets the arrow: if (hasArrowHead()) { RS_Solid* s = new RS_Solid(this, RS_SolidData()); s->shapeArrow(p1, p2.angleTo(p1), getGraphicVariableDouble("$DIMASZ", 2.5)* getGraphicVariableDouble("$DIMSCALE", 1.0)); s->setPen(RS_Pen(RS2::FlagInvalid)); s->setLayer(nullptr); RS_EntityContainer::addEntity(s); } } calculateBorders(); }
/** * Implementation of update. Updates the arrow. */ void RS_Leader::update() { // find and delete arrow: for (RS_Entity* e=firstEntity(); e!=NULL; e=nextEntity()) { if (e->rtti()==RS2::EntitySolid) { removeEntity(e); break; } } if (isUndone()) { setVisible(false); return; } RS_Entity* fe = firstEntity(); if (fe!=NULL && fe->isAtomic()) { RS_Vector p1 = ((RS_AtomicEntity*)fe)->getStartpoint(); RS_Vector p2 = ((RS_AtomicEntity*)fe)->getEndpoint(); // first entity must be the line which gets the arrow: if (hasArrowHead()) { RS_Solid* s = new RS_Solid(this, RS_SolidData()); s->shapeArrow(p1, p2.angleTo(p1), getGraphicVariableDouble("$DIMASZ", 2.5)); s->setPen(RS_Pen(RS2::FlagInvalid)); s->setLayer(NULL); RS_EntityContainer::addEntity(s); } } }
/** * Adds a vertex from the endpoint of the last element or * sets the startpoint to the point 'v'. * * The very first vertex added is the starting point. * * @param v vertex coordinate * * @return Pointer to the entity that was added or nullptr if this * was the first vertex added. */ RS_Entity* RS_Leader::addVertex(const RS_Vector& v) { RS_Entity* entity{nullptr}; static RS_Vector last = RS_Vector{false}; if (empty) { last = v; empty = false; } else { // add line to the leader: entity = new RS_Line{this, {last, v}}; entity->setPen(RS_Pen(RS2::FlagInvalid)); entity->setLayer(nullptr); RS_EntityContainer::addEntity(entity); if (count()==1 && hasArrowHead()) { update(); } last = v; } return entity; }
/** * Adds a vertex from the endpoint of the last element or * sets the startpoint to the point 'v'. * * The very first vertex added is the starting point. * * @param v vertex coordinate * * @return Pointer to the entity that was addded or NULL if this * was the first vertex added. */ RS_Entity* RS_Leader::addVertex(const RS_Vector& v) { RS_Entity* entity=NULL; static RS_Vector last = RS_Vector(false); if (empty) { last = v; empty = false; } else { // add line to the leader: entity = new RS_Line(this, RS_LineData(last, v)); entity->setPen(RS_Pen(RS2::FlagInvalid)); entity->setLayer(NULL); RS_EntityContainer::addEntity(entity); if (count()==1 && hasArrowHead()) { update(); } last = v; } return entity; }