int BrepHandler::extractEdge(const DirectoryEntry* edgeListDE, int index) { EdgeKey k = make_pair(edgeListDE, index); EdgeMap::iterator i = edges.find(k); if (i == edges.end()) { Pointer initVertexList; Integer initVertexIndex; Pointer termVertexList; Integer termVertexIndex; debug("########################## E X T R A C T E D G E"); ParameterData params; _iges->getParameter(edgeListDE->paramData(), params); int paramIndex = (index-1)*5 + 2; Pointer msCurvePtr = params.getPointer(paramIndex); initVertexList = params.getPointer(paramIndex+1); initVertexIndex = params.getInteger(paramIndex+2); termVertexList = params.getPointer(paramIndex+3); termVertexIndex = params.getInteger(paramIndex+4); // extract the model space curves int mCurveIndex = extractCurve(_iges->getDirectoryEntry(msCurvePtr), false); // extract the vertices int initVertex = extractVertex(_iges->getDirectoryEntry(initVertexList), initVertexIndex); int termVertex = extractVertex(_iges->getDirectoryEntry(termVertexList), termVertexIndex); edges[k] = handleEdge(mCurveIndex, initVertex, termVertex); return edges[k]; } else { return i->second; } }
void PaintBrush::loadImage(const Node& root) { update(); interactionCount_ = 0; actions_.clear(); vertexList_.clear(); edgeList_.clear(); std::list< Node > children = root.children(); std::list< Node >::iterator it; for (it = children.begin(); it != children.end(); ++it) { if (it->name() == "vertex") vertexList_.push_back(extractVertex(it->children())); if (it->name() == "edge") edgeList_.push_back(extractEdge(it->children())); } // now iterate the edges and update the image. std::list< Edge >::iterator eit; for (eit = edgeList_.begin(); eit != edgeList_.end(); ++eit) { Vertex v1 = lookup(eit->v1); path_ = WPainterPath(WPointF(v1.x, v1.y)); path_.addRect(v1.x, v1.y, 1, 1); Vertex v2 = lookup(eit->v2); path_.lineTo(v2.x, v2.y); path_.addRect(v2.x, v2.y, 1, 1); actions_.push_back(path_); } update(PaintUpdate); }
void Graph::extractPrimitives(vector<Primitive*> &primitives) { set<VertexPtr> heap; Vertices::iterator iter = mVertices.begin(); Vertices::iterator end = mVertices.end(); for(; iter != end; ++iter) heap.insert(iter->second); while(!heap.empty()) { VertexPtr vptr = *heap.begin(); Vertex* v0 = (Vertex*)vptr; if(v0->adjacent.size() == 0) extractVertex(v0, heap, primitives); else if(v0->adjacent.size() == 1) extractFilament(v0, v0->adjacent[0], heap, primitives); else extractPrimitive(v0, heap, primitives); } }