From 207bdf845cc0d52f84b080e7eacedbc0f7d0fd17 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Sat, 5 Oct 2024 10:57:49 +0800 Subject: [PATCH] 1 --- StoryPresent/dag_layout.cpp | 40 +++++++++++++++++++++++++++++++----- StoryPresent/dag_layout.h | 8 ++++++-- StoryPresent/dag_present.cpp | 4 ++-- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/StoryPresent/dag_layout.cpp b/StoryPresent/dag_layout.cpp index d5bd88b..e8edc53 100644 --- a/StoryPresent/dag_layout.cpp +++ b/StoryPresent/dag_layout.cpp @@ -49,11 +49,11 @@ std::shared_ptr dags::DAGOrderHelper::layerNode() const { return this->layer_bind; } -std::shared_ptr dags::DAGOrderHelper::relateNode() const { +std::shared_ptr dags::DAGOrderHelper::tailsNode() const { return this->relate_bind; } -std::shared_ptr dags::DAGOrderHelper::towardsNode() const { +std::shared_ptr dags::DAGOrderHelper::headsNode() const { return this->towards_to; } @@ -153,7 +153,7 @@ std::shared_ptr DAGGraph::spawns_peak(QList(); } -void DAGGraph::graph_recovery(const QList> &sort_seqs) { +void DAGGraph::graph_recovery(const QList>& sort_seqs) { for (auto it : sort_seqs) { it->inputCount() = 0; } @@ -170,7 +170,7 @@ void DAGGraph::graph_recovery(const QList> &sort } } -int DAGGraph::node_layering(const std::shared_ptr &inst, int layer_current) { +int DAGGraph::node_layering(const std::shared_ptr& inst, int layer_current) { auto max_remains = layer_current; if (!layer_current || inst->layerValue() < layer_current) { inst->setLayerValue(layer_current); @@ -228,7 +228,7 @@ QList> DAGGraph::tidy_graph_nodes() { } #include -void DAGGraph::graph_layer_nodes_sort(int layer_index, const QList> &nodes) { +void DAGGraph::graph_layer_nodes_sort(int layer_index, const QList>& nodes) { QList> nodes_within_current_layer; for (auto n : nodes) if (n->layerNumber() == layer_index) { @@ -313,6 +313,36 @@ void dags::DAGGraph::above_nodes_sort(int layer_index, const QList>& total_nodes) +{ + int curr_layer = 0; + while (layer_adjust_after_layout(curr_layer++, total_nodes)) { + this->above_nodes_sort(curr_layer, total_nodes); + } +} + +bool dags::DAGGraph::layer_adjust_after_layout(int curr_layer, const QList>& total_nodes) +{ + QList> nodes_within_current_layer; + std::copy_if(total_nodes.begin(), total_nodes.end(), std::back_inserter(nodes_within_current_layer), + [&](std::shared_ptr ins) { return ins->layerNumber() == curr_layer; }); + + if (!nodes_within_current_layer.size()) + return false; + + for (auto node : nodes_within_current_layer) { + this->node_adjust_after_layout(node, total_nodes); + } + return true; +} + +void dags::DAGGraph::node_adjust_after_layout(std::shared_ptr curr_node, const QList>& total_nodes) +{ + auto next_data = curr_node->headsNode(); + + auto upstream_nodes = curr_node->getUpstreamNodes(); +} + void dags::DAGGraph::graphLayout() { QList> sort_seqs; QList> refs; diff --git a/StoryPresent/dag_layout.h b/StoryPresent/dag_layout.h index c40dea9..a1905fd 100644 --- a/StoryPresent/dag_layout.h +++ b/StoryPresent/dag_layout.h @@ -54,8 +54,8 @@ namespace dags { bool isFakeNode() const; std::shared_ptr layerNode() const; - std::shared_ptr relateNode() const; - std::shared_ptr towardsNode() const; + std::shared_ptr tailsNode() const; + std::shared_ptr headsNode() const; int layerNumber() const; void setLayerNumber(int v); @@ -88,5 +88,9 @@ namespace dags { QList> tidy_graph_nodes(); void graph_layer_nodes_sort(int layer_index, const QList> &nodes); void above_nodes_sort(int curr_layer, const QList>& total_nodes); + + void graph_adjust_after_layout(const QList>& total_nodes); + bool layer_adjust_after_layout(int curr_layer, const QList>& total_nodes); + void node_adjust_after_layout(std::shared_ptr curr_node, const QList>& total_nodes); }; } diff --git a/StoryPresent/dag_present.cpp b/StoryPresent/dag_present.cpp index f11ba2a..84ed5e7 100644 --- a/StoryPresent/dag_present.cpp +++ b/StoryPresent/dag_present.cpp @@ -172,8 +172,8 @@ QList DAGActiveView::layer_nodes_construction(const QHashisFakeNode()) { - auto from = data_node->relateNode()->bindPoint().name(); - auto to = data_node->towardsNode()->bindPoint().name(); + auto from = data_node->tailsNode()->bindPoint().name(); + auto to = data_node->headsNode()->bindPoint().name(); auto curr_gnode = new PenetrateNode(20, from, to); this->scene_bind.addItem(curr_gnode); curr_gnode->setPos(prev_layer_end, data_node->sortNumber() * (this->node_span + this->font().pointSizeF()) * 7);