/** * Adds a vertex from the endpoint of the last segment or * from the startpoint of the first segment to 'v' or * sets the startpoint to the point 'v'. * * The very first vertex added with this method is the startpoint. * * @param v vertex coordinate to be added * @param bulge The bulge of the arc or 0 for a line segment (see DXF documentation) * @param prepend true: prepend at start instead of append at end * * @return Pointer to the entity that was addded or NULL if this * was the first vertex added. */ RS_Entity* RS_Polyline::addVertex(const RS_Vector& v, double bulge, bool prepend) { RS_Entity* entity=NULL; //static double nextBulge = 0.0; // very first vertex: if (!data.startpoint.valid) { data.startpoint = data.endpoint = v; nextBulge = bulge; } // consequent vertices: else { // add entity to the polyline: entity = createVertex(v, nextBulge, prepend); if (entity!=NULL) { if (prepend==false) { RS_EntityContainer::addEntity(entity); data.endpoint = v; } else { RS_EntityContainer::insertEntity(0, entity); data.startpoint = v; } } nextBulge = bulge; endPolyline(); } //data.endpoint = v; return entity; }
//RLZ: rewrite this: void RS_Polyline::setClosed(bool cl, double bulge) { Q_UNUSED(bulge); setClosed(cl); if (isClosed()) { endPolyline(); } else { removeLastVertex(); } }
/** * Appends a vertex list from the endpoint of the last segment * sets the startpoint to the first point if not exist. * * The very first vertex added with this method is the startpoint if not exists. * * @param vl list of vertexs coordinate to be added * @param Pair are RS_Vector of coord and the bulge of the arc or 0 for a line segment (see DXF documentation) * * @return None */ void RS_Polyline::appendVertexs(const QList< QPair<RS_Vector*, double> > vl) { RS_Entity* entity=NULL; //static double nextBulge = 0.0; if (vl.isEmpty()) return; int idx = 0; // very first vertex: if (!data.startpoint.valid) { data.startpoint = data.endpoint = *(vl.at(idx).first); nextBulge = vl.at(idx++).second; } // consequent vertices: for (; idx< vl.size();idx++){ entity = createVertex(*(vl.at(idx).first), nextBulge, false); data.endpoint = entity->getEndpoint(); RS_EntityContainer::addEntity(entity); nextBulge = vl.at(idx).second; } endPolyline(); }
/** * Appends a vertex list from the endpoint of the last segment * sets the startpoint to the first point if not exist. * * The very first vertex added with this method is the startpoint if not exists. * * @param vl list of vertexs coordinate to be added * @param Pair are RS_Vector of coord and the bulge of the arc or 0 for a line segment (see DXF documentation) * * @return None */ void RS_Polyline::appendVertexs(const std::vector< std::pair<RS_Vector, double> >& vl) { RS_Entity* entity=nullptr; //static double nextBulge = 0.0; if (!vl.size()) return; size_t idx = 0; // very first vertex: if (!data.startpoint.valid) { data.startpoint = data.endpoint = vl.at(idx).first; nextBulge = vl.at(idx++).second; } // consequent vertices: for (; idx< vl.size();idx++){ entity = createVertex(vl.at(idx).first, nextBulge, false); data.endpoint = entity->getEndpoint(); RS_EntityContainer::addEntity(entity); nextBulge = vl.at(idx).second; } endPolyline(); }