LayoutUtility.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #include "LayoutUtility.h"
  2. LayoutUtility::LayoutUtility()
  3. {
  4. }
  5. void LayoutUtility::setCompartment(SubGraph &gSubgraph, SubGraph &gMainGraph)
  6. {
  7. int iLowestX, iLowestY, iHighestX, iHighestY;
  8. int iHeight, iWidth;
  9. iLowestX = iLowestY = iHighestX = iHighestY = 0;
  10. m_iMargin = 15;
  11. BGL_FORALL_VERTICES(vVertex, gSubgraph, SubGraph)
  12. {
  13. VertexDescriptor vGlobalVertex = gSubgraph.local_to_global(vVertex);
  14. qDebug() << "V: " << PGL_VERTEX_INDEX(vGlobalVertex , gMainGraph) ;
  15. int iXCoordinate, iYCoordinate;
  16. if(m_GraphWrapper.getVertexExpandable(vGlobalVertex , gMainGraph) ||
  17. m_GraphWrapper.getVertexIsInvisible(vGlobalVertex , gMainGraph) )
  18. {
  19. //skip the expandable or invisible vertex
  20. continue;
  21. }
  22. ;iXCoordinate = m_GraphWrapper.getVertexCenterCoordX(vGlobalVertex , gMainGraph);
  23. iYCoordinate = m_GraphWrapper.getVertexCenterCoordY(vGlobalVertex , gMainGraph);
  24. if (iLowestX > iXCoordinate)
  25. (iLowestX = iXCoordinate);
  26. if (iLowestY > iYCoordinate)
  27. (iLowestY = iYCoordinate);
  28. if (iHighestX < iXCoordinate)
  29. (iHighestX = iXCoordinate);
  30. if (iHighestY < iYCoordinate)
  31. (iHighestY = iYCoordinate);
  32. }
  33. iHeight = std::abs(std::abs(iLowestY) - std::abs(iHighestY));
  34. iWidth = std::abs(std::abs(iLowestX) - std::abs(iHighestX));
  35. qDebug()<<"Low X :"<<iLowestX;
  36. qDebug()<<"Low Y :"<<iLowestY;
  37. qDebug()<<"Height :"<<iHeight;
  38. qDebug()<<"Width :"<<iWidth;
  39. int iCompartmentLowX = (iLowestX - m_iMargin);
  40. int iCompartmentLowY = (iLowestY - m_iMargin);
  41. int iCompartmentHeight = (iHeight + (2 * m_iMargin));
  42. int iCompartmentWidth = (iWidth + (2 * m_iMargin));
  43. m_GraphWrapper.setGraphCoordX(iCompartmentLowX , gSubgraph);
  44. m_GraphWrapper.setGraphCoordY(iCompartmentLowY , gSubgraph);
  45. m_GraphWrapper.setGraphHeight(iCompartmentHeight , gSubgraph);
  46. m_GraphWrapper.setGraphWidth(iCompartmentWidth , gSubgraph);
  47. }
  48. void LayoutUtility::setCompartmentTest(SubGraph &gSubgraph)
  49. {
  50. int iLowestX, iLowestY, iHighestX, iHighestY;
  51. int iHeight, iWidth;
  52. iLowestX = iLowestY = iHighestX = iHighestY = 0;
  53. m_iMargin = 15;
  54. BGL_FORALL_VERTICES(vVertex, gSubgraph, SubGraph)
  55. {
  56. qDebug() << "V: " << PGL_VERTEX_INDEX(vVertex , gSubgraph) ;
  57. int iXCoordinate, iYCoordinate;
  58. if(m_GraphWrapper.getVertexExpandable(vVertex , gSubgraph) ||
  59. m_GraphWrapper.getVertexIsInvisible(vVertex , gSubgraph) )
  60. {
  61. //skip the expandable or invisible vertex
  62. continue;
  63. }
  64. iXCoordinate = m_GraphWrapper.getVertexCenterCoordX(vVertex , gSubgraph);
  65. iYCoordinate = m_GraphWrapper.getVertexCenterCoordY(vVertex , gSubgraph);
  66. if (iLowestX > iXCoordinate)
  67. (iLowestX = iXCoordinate);
  68. if (iLowestY > iYCoordinate)
  69. (iLowestY = iYCoordinate);
  70. if (iHighestX < iXCoordinate)
  71. (iHighestX = iXCoordinate);
  72. if (iHighestY < iYCoordinate)
  73. (iHighestY = iYCoordinate);
  74. }
  75. iHeight = std::abs(std::abs(iLowestY) - std::abs(iHighestY));
  76. iWidth = std::abs(std::abs(iLowestX) - std::abs(iHighestX));
  77. qDebug()<<"Low X :"<<iLowestX;
  78. qDebug()<<"Low Y :"<<iLowestY;
  79. qDebug()<<"Height :"<<iHeight;
  80. qDebug()<<"Width :"<<iWidth;
  81. int iCompartmentLowX = (iLowestX - m_iMargin);
  82. int iCompartmentLowY = (iLowestY - m_iMargin);
  83. int iCompartmentHeight = (iHeight + (2 * m_iMargin));
  84. int iCompartmentWidth = (iWidth + (2 * m_iMargin));
  85. m_GraphWrapper.setGraphCoordX(iCompartmentLowX , gSubgraph);
  86. m_GraphWrapper.setGraphCoordY(iCompartmentLowY , gSubgraph);
  87. m_GraphWrapper.setGraphHeight(iCompartmentHeight , gSubgraph);
  88. m_GraphWrapper.setGraphWidth(iCompartmentWidth , gSubgraph);
  89. }
  90. void LayoutUtility::reinitializeEdgeIndices(graph &gInputGraph)
  91. {
  92. property_map<graph, edge_index_t>::type e_index = get(edge_index, gInputGraph);
  93. graph_traits<graph>::edges_size_type edge_count = 0;
  94. graph_traits<graph>::edge_iterator ei, ei_end;
  95. for(boost::tie(ei, ei_end) = edges(gInputGraph); ei != ei_end; ++ei)
  96. put(e_index, *ei, edge_count++);
  97. }
  98. void LayoutUtility::reinitializeEdgeIndices(SubGraph &gInputSubGraph)
  99. {
  100. property_map<SubGraph, edge_index_t>::type in_e_index = get(edge_index, gInputSubGraph);
  101. graph_traits<SubGraph>::edges_size_type in_edge_count = 0;
  102. graph_traits<SubGraph>::edge_iterator in_ei, in_ei_end;
  103. for(boost::tie(in_ei, in_ei_end) = edges(gInputSubGraph); in_ei != in_ei_end; ++in_ei)
  104. put(in_e_index, *in_ei, in_edge_count++);
  105. }
  106. void LayoutUtility::reinitializeEdgeIndices(dijkstra_graph & gInputDijkGraph)
  107. {
  108. property_map<dijkstra_graph, edge_index_t>::type in_e_index = get(edge_index, gInputDijkGraph);
  109. graph_traits<dijkstra_graph>::edges_size_type in_edge_count = 0;
  110. graph_traits<dijkstra_graph>::edge_iterator in_ei, in_ei_end;
  111. for(boost::tie(in_ei, in_ei_end) = edges(gInputDijkGraph); in_ei != in_ei_end; ++in_ei)
  112. put(in_e_index, *in_ei, in_edge_count++);
  113. }
  114. //void LayoutUtility::copyCompartmentProperties(SubGraph &gCopyGraph,
  115. // QMap<int, SubGraph*> &mapClusterIdToChild)
  116. //{
  117. // //for each chld of current graph
  118. // ChildrenIterator itrChild, itrChildEnd;
  119. // for(boost::tie(itrChild, itrChildEnd)=gCopyGraph.children(); itrChild!=itrChildEnd; ++itrChild)
  120. // {
  121. // //recursive
  122. // //SubGraph gChild = *itrChild;
  123. // copyCompartmentProperties(*itrChild, mapClusterIdToChild);
  124. // }
  125. // BoostGraphWrapper boostGraphWrapper;
  126. // //get child from mainGraph corres. to current graph
  127. // int iCurrentClusterID = boostGraphWrapper.getGraphClusterID(gCopyGraph);
  128. // LAYOUT_ASSERT(mapClusterIdToChild.contains(iCurrentClusterID),
  129. // LayoutException("copyCompartmentProperties",
  130. // LayoutExceptionEnum::NOT_FOUND_IN_CONTAINER,
  131. // "mapClusterIDToChild",
  132. // "ClusterID"));
  133. // SubGraph* gCorrespondingChild = mapClusterIdToChild.value(iCurrentClusterID);
  134. // //get its properties
  135. // int iChildHeight, iChildWidth, iLeftTopX, iLeftTopY;
  136. // iChildHeight = boostGraphWrapper.getGraphHeight(*gCorrespondingChild);
  137. // iChildWidth = boostGraphWrapper.getGraphWidth(*gCorrespondingChild);
  138. // iLeftTopX = boostGraphWrapper.getGraphLeftTopCoordX(*gCorrespondingChild);
  139. // iLeftTopY = boostGraphWrapper.getGraphLeftTopCoordY(*gCorrespondingChild);
  140. // //set properties of current graph
  141. // boostGraphWrapper.setGraphHeight(iChildHeight, gCopyGraph);
  142. // boostGraphWrapper.setGraphWidth(iChildWidth, gCopyGraph);
  143. // boostGraphWrapper.setGraphLeftTopCoordX(iLeftTopX, gCopyGraph);
  144. // boostGraphWrapper.setGraphLeftTopCoordY(iLeftTopY, gCopyGraph);
  145. // qDebug()<<"copying C"<<iCurrentClusterID<<"("<<iChildHeight<<","<<iChildWidth<<","<<iLeftTopX<<","<<iLeftTopY<<")\n";
  146. //}