polar snapping now very goood!
This commit is contained in:
+14
-14
@@ -32,7 +32,7 @@ class AppState{
|
||||
AppUI ui;
|
||||
|
||||
void updateMidiPorts(){
|
||||
for(auto&n : gm.nodes | std::ranges::views::filter([](std::shared_ptr<Node> n){return n->getNodeType() == NodeType::MIDINODE;})){
|
||||
for(auto&n : gm.nodes | RANGE_FILTER([](SPTR_Node n){return n->getNodeType() == NodeType::MIDINODE;})){
|
||||
auto nc = std::dynamic_pointer_cast<MidiNode>(n);
|
||||
for(auto& mo : sm.midi.midi_out_ports){
|
||||
if(!nc->midi_outs.contains(mo.number) && mo.enabled){
|
||||
@@ -45,16 +45,16 @@ class AppState{
|
||||
}
|
||||
}
|
||||
|
||||
void copyNodesAndConnections(std::vector<std::shared_ptr<Node>> nodes, Vec2D<float> position){
|
||||
void copyNodesAndConnections(VEC_SPTR_Node nodes, Vec2D<float> position){
|
||||
|
||||
std::vector<std::shared_ptr<Edge>> copy_connections;
|
||||
VEC_SPTR_Edge copy_connections;
|
||||
for(auto n : nodes){
|
||||
std::ranges::copy_if(n->connections.begin(), n->connections.end(), std::back_inserter(copy_connections), [nodes](std::shared_ptr<Edge> e){ return std::ranges::contains(nodes, e->start) && std::ranges::contains(nodes, e->end);});
|
||||
std::ranges::copy_if(n->connections.begin(), n->connections.end(), std::back_inserter(copy_connections), [nodes](SPTR_Edge e){ return std::ranges::contains(nodes, e->start) && std::ranges::contains(nodes, e->end);});
|
||||
}
|
||||
|
||||
for(auto n : nodes){
|
||||
std::shared_ptr<Node> old_node = n;
|
||||
std::shared_ptr<Node> new_node = gm.copyNode(n, position + n->drag_offset);
|
||||
SPTR_Node old_node = n;
|
||||
SPTR_Node new_node = gm.copyNode(n, position + n->drag_offset);
|
||||
new_node->copied = false;
|
||||
new_node->selected = true;
|
||||
|
||||
@@ -67,26 +67,26 @@ class AppState{
|
||||
gm.edges.insert(gm.edges.end(), copy_connections.cbegin(), copy_connections.cend());
|
||||
}
|
||||
|
||||
void removeNodes(std::vector<std::shared_ptr<Node>> nodes){
|
||||
void removeNodes(VEC_SPTR_Node nodes){
|
||||
|
||||
for(auto n : gm.nodes){
|
||||
n->highlighted = false;
|
||||
}
|
||||
|
||||
auto erase_connections = gm.edges | std::ranges::views::filter([nodes](std::shared_ptr<Edge> c){ return std::ranges::contains(nodes, c->start) || std::ranges::contains(nodes, c->end);});
|
||||
auto erase_connections = gm.edges | RANGE_FILTER([nodes](SPTR_Edge c){ return std::ranges::contains(nodes, c->start) || std::ranges::contains(nodes, c->end);});
|
||||
|
||||
std::vector<std::shared_ptr<Node>> adjacent_nodes;
|
||||
VEC_SPTR_Node adjacent_nodes;
|
||||
|
||||
for(auto c : erase_connections){
|
||||
if(!c->start->selected) adjacent_nodes.push_back(c->start);
|
||||
if(!c->end->selected) adjacent_nodes.push_back(c->end);
|
||||
}
|
||||
|
||||
auto reroute_signals = sm.signals | std::ranges::views::filter([nodes](std::shared_ptr<Signal> s){return std::ranges::contains(nodes, s->next);});
|
||||
auto reroute_signals = sm.signals | RANGE_FILTER([nodes](SPTR_Signal s){return std::ranges::contains(nodes, s->next);});
|
||||
|
||||
for(auto s : reroute_signals){
|
||||
float dist = 10000000;
|
||||
std::shared_ptr<Node> next_node;
|
||||
SPTR_Node next_node;
|
||||
for(auto n : adjacent_nodes){
|
||||
if(n->position.dist(s->position) < dist) {
|
||||
dist = n->position.dist(s->position);
|
||||
@@ -97,16 +97,16 @@ class AppState{
|
||||
s->last = next_node;
|
||||
}
|
||||
|
||||
auto rebase_signals = sm.signals | std::ranges::views::filter([nodes](std::shared_ptr<Signal> s){return std::ranges::contains(nodes, s->start);});
|
||||
auto rebase_signals = sm.signals | RANGE_FILTER([nodes](SPTR_Signal s){return std::ranges::contains(nodes, s->start);});
|
||||
|
||||
for(auto s : rebase_signals){
|
||||
s->start = s->next;
|
||||
}
|
||||
|
||||
for(auto n : nodes){
|
||||
std::erase_if(gm.edges, [n](std::shared_ptr<Edge> c){ return c->start == n || c->end == n;});
|
||||
std::erase_if(gm.edges, [n](SPTR_Edge c){ return c->start == n || c->end == n;});
|
||||
}
|
||||
std::erase_if(gm.nodes, [nodes](std::shared_ptr<Node> n){ return std::ranges::contains(nodes, n);});
|
||||
std::erase_if(gm.nodes, [nodes](SPTR_Node n){ return std::ranges::contains(nodes, n);});
|
||||
}
|
||||
|
||||
void draw(Vec2D<float> mouse_pos, Camera2D camera){
|
||||
|
||||
Reference in New Issue
Block a user