This commit is contained in:
codeboss 2024-10-05 10:57:49 +08:00
parent b24507a479
commit 207bdf845c
3 changed files with 43 additions and 9 deletions

View File

@ -49,11 +49,11 @@ std::shared_ptr<DAGLayerHelper> dags::DAGOrderHelper::layerNode() const {
return this->layer_bind;
}
std::shared_ptr<DAGLayerHelper> dags::DAGOrderHelper::relateNode() const {
std::shared_ptr<DAGLayerHelper> dags::DAGOrderHelper::tailsNode() const {
return this->relate_bind;
}
std::shared_ptr<DAGLayerHelper> dags::DAGOrderHelper::towardsNode() const {
std::shared_ptr<DAGLayerHelper> dags::DAGOrderHelper::headsNode() const {
return this->towards_to;
}
@ -313,6 +313,36 @@ void dags::DAGGraph::above_nodes_sort(int layer_index, const QList<std::shared_p
}
}
void dags::DAGGraph::graph_adjust_after_layout(const QList<std::shared_ptr<DAGOrderHelper>>& 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<std::shared_ptr<DAGOrderHelper>>& total_nodes)
{
QList<std::shared_ptr<DAGOrderHelper>> nodes_within_current_layer;
std::copy_if(total_nodes.begin(), total_nodes.end(), std::back_inserter(nodes_within_current_layer),
[&](std::shared_ptr<DAGOrderHelper> 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<DAGOrderHelper> curr_node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
{
auto next_data = curr_node->headsNode();
auto upstream_nodes = curr_node->getUpstreamNodes();
}
void dags::DAGGraph::graphLayout() {
QList<std::shared_ptr<DAGLayerHelper>> sort_seqs;
QList<std::shared_ptr<DAGLayerHelper>> refs;

View File

@ -54,8 +54,8 @@ namespace dags {
bool isFakeNode() const;
std::shared_ptr<DAGLayerHelper> layerNode() const;
std::shared_ptr<DAGLayerHelper> relateNode() const;
std::shared_ptr<DAGLayerHelper> towardsNode() const;
std::shared_ptr<DAGLayerHelper> tailsNode() const;
std::shared_ptr<DAGLayerHelper> headsNode() const;
int layerNumber() const;
void setLayerNumber(int v);
@ -88,5 +88,9 @@ namespace dags {
QList<std::shared_ptr<DAGOrderHelper>> tidy_graph_nodes();
void graph_layer_nodes_sort(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>> &nodes);
void above_nodes_sort(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
void graph_adjust_after_layout(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
bool layer_adjust_after_layout(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
void node_adjust_after_layout(std::shared_ptr<DAGOrderHelper> curr_node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
};
}

View File

@ -172,8 +172,8 @@ QList<IGraphNode*> DAGActiveView::layer_nodes_construction(const QHash<IGraphNod
// 构建当前层次图形节点
for (auto& data_node : current_layer_datas) {
if (data_node->isFakeNode()) {
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);