コード例 #1
0
ファイル: BrepHandler.cpp プロジェクト: cciechad/brlcad
  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;
    }
  }
コード例 #2
0
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);
}
コード例 #3
0
ファイル: Graph.cpp プロジェクト: sg47/CityGenerator
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);
	}
}