This commit is contained in:
parent
0ba87a2d70
commit
b24507a479
|
@ -278,37 +278,41 @@ void DAGGraph::graph_layer_nodes_sort(int layer_index, const QList<std::shared_p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提取所有已知节点
|
this->above_nodes_sort(layer_index, nodes);
|
||||||
QList<std::shared_ptr<DAGOrderHelper>> sorting_nodes;
|
|
||||||
std::copy_if(nodes.begin(), nodes.end(), std::back_inserter(sorting_nodes),
|
|
||||||
[&](std::shared_ptr<DAGOrderHelper> n) { return n->layerNumber() <= layer_index; });
|
|
||||||
|
|
||||||
// 排序值提取与重排
|
|
||||||
QList<double> sort_values;
|
|
||||||
std::transform(sorting_nodes.begin(), sorting_nodes.end(), std::back_inserter(sort_values),
|
|
||||||
[](std::shared_ptr<DAGOrderHelper> 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<double, int>(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->graph_layer_nodes_sort(layer_index + 1, nodes);
|
this->graph_layer_nodes_sort(layer_index + 1, nodes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dags::DAGGraph::above_nodes_sort(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>>& nodes)
|
||||||
|
{
|
||||||
|
// 提取所有已知节点
|
||||||
|
QList<std::shared_ptr<DAGOrderHelper>> sorting_nodes;
|
||||||
|
std::copy_if(nodes.begin(), nodes.end(), std::back_inserter(sorting_nodes),
|
||||||
|
[&](std::shared_ptr<DAGOrderHelper> n) { return n->layerNumber() <= layer_index; });
|
||||||
|
|
||||||
|
// 排序值提取与重排
|
||||||
|
QList<double> sort_values;
|
||||||
|
std::transform(sorting_nodes.begin(), sorting_nodes.end(), std::back_inserter(sort_values),
|
||||||
|
[](std::shared_ptr<DAGOrderHelper> 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<double, int>(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() {
|
void dags::DAGGraph::graphLayout() {
|
||||||
QList<std::shared_ptr<DAGLayerHelper>> sort_seqs;
|
QList<std::shared_ptr<DAGLayerHelper>> sort_seqs;
|
||||||
QList<std::shared_ptr<DAGLayerHelper>> refs;
|
QList<std::shared_ptr<DAGLayerHelper>> refs;
|
||||||
|
|
|
@ -87,6 +87,6 @@ namespace dags {
|
||||||
int node_layering_adj(std::shared_ptr<DAGLayerHelper> inst);
|
int node_layering_adj(std::shared_ptr<DAGLayerHelper> inst);
|
||||||
QList<std::shared_ptr<DAGOrderHelper>> tidy_graph_nodes();
|
QList<std::shared_ptr<DAGOrderHelper>> tidy_graph_nodes();
|
||||||
void graph_layer_nodes_sort(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>> &nodes);
|
void graph_layer_nodes_sort(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>> &nodes);
|
||||||
// void above_node_sort(int curr_layer, )
|
void above_nodes_sort(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue