From b24507a4796ffcdbcb886e93ea7c7f63365e77f9 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Sat, 5 Oct 2024 10:26:07 +0800 Subject: [PATCH] 1 --- StoryPresent/dag_layout.cpp | 58 ++++++++++++++++++++----------------- StoryPresent/dag_layout.h | 2 +- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/StoryPresent/dag_layout.cpp b/StoryPresent/dag_layout.cpp index 6d9c9a6..d5bd88b 100644 --- a/StoryPresent/dag_layout.cpp +++ b/StoryPresent/dag_layout.cpp @@ -278,37 +278,41 @@ void DAGGraph::graph_layer_nodes_sort(int layer_index, const QList> sorting_nodes; - std::copy_if(nodes.begin(), nodes.end(), std::back_inserter(sorting_nodes), - [&](std::shared_ptr n) { return n->layerNumber() <= layer_index; }); - - // 排序值提取与重排 - QList sort_values; - std::transform(sorting_nodes.begin(), sorting_nodes.end(), std::back_inserter(sort_values), - [](std::shared_ptr n)->double { return n->sortNumber(); }); - sort_values = sort_values.toSet().toList(); - std::sort(sort_values.begin(), sort_values.end()); - - // 检索排序中轴 - auto temp_anchor = std::make_pair(DBL_MAX, -1); - for (int nidx = 0; nidx < sort_values.size(); ++nidx) { - auto value_span = std::abs(sort_values[nidx]); - if (value_span <= temp_anchor.first) - temp_anchor = std::make_pair(value_span, nidx); - } - - // 排序值重整 - for (int sorting_idx = 0; sorting_idx < sorting_nodes.size(); ++sorting_idx) { - auto node = sorting_nodes[sorting_idx]; - auto sort_idx = sort_values.indexOf(node->sortNumber()); - node->setSortNumber(sort_idx - temp_anchor.second); - } - + this->above_nodes_sort(layer_index, nodes); this->graph_layer_nodes_sort(layer_index + 1, nodes); } } +void dags::DAGGraph::above_nodes_sort(int layer_index, const QList>& nodes) +{ + // 提取所有已知节点 + QList> sorting_nodes; + std::copy_if(nodes.begin(), nodes.end(), std::back_inserter(sorting_nodes), + [&](std::shared_ptr n) { return n->layerNumber() <= layer_index; }); + + // 排序值提取与重排 + QList sort_values; + std::transform(sorting_nodes.begin(), sorting_nodes.end(), std::back_inserter(sort_values), + [](std::shared_ptr n)->double { return n->sortNumber(); }); + sort_values = sort_values.toSet().toList(); + std::sort(sort_values.begin(), sort_values.end()); + + // 检索排序中轴 + auto temp_anchor = std::make_pair(DBL_MAX, -1); + for (int nidx = 0; nidx < sort_values.size(); ++nidx) { + auto value_span = std::abs(sort_values[nidx]); + if (value_span <= temp_anchor.first) + temp_anchor = std::make_pair(value_span, nidx); + } + + // 排序值重整 + for (int sorting_idx = 0; sorting_idx < sorting_nodes.size(); ++sorting_idx) { + auto node = sorting_nodes[sorting_idx]; + auto sort_idx = sort_values.indexOf(node->sortNumber()); + node->setSortNumber(sort_idx - temp_anchor.second); + } +} + void dags::DAGGraph::graphLayout() { QList> sort_seqs; QList> refs; diff --git a/StoryPresent/dag_layout.h b/StoryPresent/dag_layout.h index 241d57e..c40dea9 100644 --- a/StoryPresent/dag_layout.h +++ b/StoryPresent/dag_layout.h @@ -87,6 +87,6 @@ namespace dags { int node_layering_adj(std::shared_ptr inst); QList> tidy_graph_nodes(); void graph_layer_nodes_sort(int layer_index, const QList> &nodes); -// void above_node_sort(int curr_layer, ) + void above_nodes_sort(int curr_layer, const QList>& total_nodes); }; }