bool importGraph() { unsigned int nbNodes = 30; if (dataSet!=NULL) { dataSet->get("nodes", nbNodes); } if (nbNodes < 3) nbNodes = 3; srand(clock()); LayoutProperty *newLayout = graph->getLocalProperty<LayoutProperty>("viewLayout"); SizeProperty *newSize = graph->getLocalProperty<SizeProperty>("viewSize"); newSize->setAllNodeValue(Size(1.0,1.0,1.0)); vector<Triangle> faces; Triangle f(graph->addNode(), graph->addNode(), graph->addNode()); faces.push_back(f); graph->addEdge(f.a, f.b); graph->addEdge(f.b, f.c); graph->addEdge(f.c, f.a); float val = static_cast<float>(nbNodes); newLayout->setNodeValue(f.a, Coord(-val, -val, 0)); newLayout->setNodeValue(f.b, Coord(0, val, 0)); newLayout->setNodeValue(f.c, Coord(val, -val, 0)); unsigned int nb = 3; while(nb<nbNodes) { //choose a Triangle randomly unsigned int i = rand()%faces.size(); Triangle f = faces[i]; node n = graph->addNode(); Coord tmp = newLayout->getNodeValue(f.a) + newLayout->getNodeValue(f.b) + newLayout->getNodeValue(f.c); tmp /= 3.0; newLayout->setNodeValue(n, tmp); //Split the triangle in three part graph->addEdge(n, f.a); graph->addEdge(n, f.b); graph->addEdge(n, f.c); //add the three new Triangle, remove the old one(replace) Triangle f1(f.a, f.b, n); Triangle f2(f.b, f.c, n); Triangle f3(f.c, f.a, n); faces[i] = f1; faces.push_back(f2); faces.push_back(f3); ++nb; } return pluginProgress->state()!=TLP_CANCEL; }
void TestPropertiesMinMaxAfterAddNode::testLayoutPropertyMinMaxAfterAddNode() { LayoutProperty *property = graph->getProperty<LayoutProperty>("testLayout"); // add two nodes node n1 = graph->addNode(); node n2 = graph->addNode(); const Coord firstNodePos(1.0f, 2.0f); const Coord secondNodePos(3.0f, 4.0f); property->setNodeValue(n1, firstNodePos); property->setNodeValue(n2, secondNodePos); CPPUNIT_ASSERT_EQUAL(firstNodePos, property->getMin(graph)); CPPUNIT_ASSERT_EQUAL(secondNodePos, property->getMax(graph)); // add a new node, the value associated to the layout property is the default one 0 graph->addNode(); // min should be 0 CPPUNIT_ASSERT_EQUAL(Coord(), property->getMin(graph)); CPPUNIT_ASSERT_EQUAL(secondNodePos, property->getMax(graph)); }