Esempio n. 1
0
bool Parser::readEdges(Graph &G, ClusterGraph *C, GraphAttributes *GA)
{
	List<XmlTagObject *> edgeTags;
	m_edgesTag->findSonXmlTagObjectByName("edge", edgeTags);


	List<node> sourceNodes, targetNodes;

	for(XmlTagObject *obj : edgeTags) {
		const XmlTagObject &edgeTag = *obj;

		XmlAttributeObject *sourceAttr, *targetAttr;

		edgeTag.findXmlAttributeObjectByName("source", sourceAttr);
		if(!sourceAttr) {
			OGDF_ERROR("edge is missing a source attribute "
			          << "(line " << edgeTag.getLine() << ").");
			return false;
		}

		edgeTag.findXmlAttributeObjectByName("target", targetAttr);
		if(!targetAttr) {
			OGDF_ERROR("edge is missing a target attribute "
			          << "(line " << edgeTag.getLine() << ").");
			return false;
		}

		const std::string &sourceId = sourceAttr->getValue();
		const std::string &targetId = targetAttr->getValue();

		const node source = m_nodeId[sourceId];
		const node target = m_nodeId[targetId];

		if(source && target) {
			const edge e = G.newEdge(source, target);
			if(GA) {
				readAttributes(*GA, e, edgeTag);
			}
		} else if(C && edgeNodes(source, sourceId, m_clusterId, sourceNodes)
		            && edgeNodes(target, targetId, m_clusterId, targetNodes))
		{
			// So, we perform cartesian product on two sets with Graph#newEdge.
			for(node s : sourceNodes) {
				for(node t : targetNodes) {
					 const edge e = G.newEdge(s, t);
					 if(GA) {
					 	readAttributes(*GA, e, edgeTag);
					 }
				}
			}
		} else {
			OGDF_ERROR("source or target node doesn't exist "
			          << "(line " << edgeTag.getLine() << ").");
			return false;
		}
	}

	return true;
}
Esempio n. 2
0
int
L4Axisymm :: computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp)
{
    // returns transformation matrix from
    // edge local coordinate system
    // to element local c.s
    // (same as global c.s in this case)
    //
    // i.e. f(element local) = T * f(edge local)
    //
    double dx, dy, length;
    Node *nodeA, *nodeB;
    IntArray edgeNodes(2);

    answer.resize(2, 2);
    answer.zero();

    this->interpolation.computeEdgeMapping(edgeNodes, dofManArray, iEdge);

    // edge nodes are global numbers, not local element numbers
    nodeA  = domain->giveNode( edgeNodes.at(1) );
    nodeB  = domain->giveNode( edgeNodes.at(2) );

    dx     = nodeB->giveCoordinate(1) - nodeA->giveCoordinate(1);
    dy     = nodeB->giveCoordinate(2) - nodeA->giveCoordinate(2);
    length = sqrt(dx * dx + dy * dy);

    answer.at(1, 1) = dx / length;
    answer.at(1, 2) = -dy / length;
    answer.at(2, 1) = answer.at(1, 2);
    answer.at(2, 2) = dx / length;

    return 1;
}
Esempio n. 3
0
Node PaintBrush::imageNode(int dimX, int dimY, bool transform)
{
    Node result("extension");
    Attribute cAttr("class", "eurecom.usergraph.UserGraph");
    result.addAttribute(cAttr);
    Logger::entry("info") << "dimX = " << dimX;
    Logger::entry("info") << "dimY = " << dimY;
    if (!actions_.empty())
    {
        if (transform)
            result.addChildren(vertexNodes(transformVertices(dimX, dimY)));
        else
            result.addChildren(vertexNodes(vertexList_));
        result.addChildren(edgeNodes());
    }
    return result;
}