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; }
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; }
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; }