for(vector<MObject>::iterator i=objects.begin(); i!=objects.end(); ++i)
{
Object *obj = i->object->clone(&designer.get_layout());
- if(Track *track = dynamic_cast<Track *>(obj))
- {
- for(list<Object *>::iterator j=new_objs.begin(); j!=new_objs.end(); ++j)
- if(Track *track2 = dynamic_cast<Track *>(*j))
- track->snap_to(*track2, true);
- }
+ for(list<Object *>::iterator j=new_objs.begin(); j!=new_objs.end(); ++j)
+ obj->link_to(**j);
new_objs.push_back(obj);
}
return;
for(vector<MObject>::iterator i=objects.begin(); i!=objects.end(); ++i)
- if(Track *track = dynamic_cast<Track *>(i->object))
- if(track->get_type().get_endpoints().size()!=2)
- return;
+ if(i->object->get_n_link_slots()!=2)
+ return;
list<Track *> tracks2;
for(vector<MObject>::iterator i=objects.begin(); i!=objects.end(); ++i)
}
set<Track *>::iterator nb = neighbors.begin();
- int epi = (*nb)->get_endpoint_by_link(*order.front().track);
+ int epi = (*nb)->get_link_slot(*order.front().track);
float start_z = (*nb)->get_snap_node(epi).position.z;
++nb;
- epi = (*nb)->get_endpoint_by_link(*order.back().track);
+ epi = (*nb)->get_link_slot(*order.back().track);
float end_z = (*nb)->get_snap_node(epi).position.z;
if(smooth)
return;
}
- trks.front()->snap_to(*track1, true);
- trks.back()->snap_to(*track2, true);
+ trks.front()->link_to(*track1);
+ trks.back()->link_to(*track2);
selection.replace(trks.begin(), trks.end());
}
{
for(set<Track *>::iterator i=neighbors.begin(); i!=neighbors.end(); ++i)
for(vector<MObject>::iterator j=objects.begin(); j!=objects.end(); ++j)
- if(Track *track = dynamic_cast<Track *>(j->object))
- track->break_link(**i);
+ j->object->break_link(**i);
}
const set<Track *> <racks = designer.get_layout().get_tracks();
if(!ok) continue;
for(vector<MObject>::iterator j=objects.begin(); j!=objects.end(); ++j)
- if(Track *track = dynamic_cast<Track *>(j->object))
- track->snap_to(**i, true);
+ j->object->link_to(**i);
}
if(m==EXTEND)
continue;
for(vector<MObject>::iterator j=objects.begin(); (j!=objects.end() && !snapped); ++j)
- if(Track *track = dynamic_cast<Track *>(j->object))
- if(track->snap_to(**i, false, limit))
- snapped = &*j;
+ if(j->object->snap_to(**i, limit))
+ snapped = &*j;
}
if(snapped)
float length = 0;
for(vector<MObject>::iterator i=objects.begin(); i!=objects.end(); ++i)
{
- Track *track = dynamic_cast<Track *>(i->object);
- if(!track)
- continue;
-
- unsigned n_endpoints = track->get_type().get_endpoints().size();
- for(unsigned j=0; j<n_endpoints; ++j)
+ unsigned nls = i->object->get_n_link_slots();
+ for(unsigned j=0; j<nls; ++j)
{
- if(track->get_link(j))
+ if(i->object->get_link(j))
continue;
- Snap sn = track->get_snap_node(j);
+ Snap sn = i->object->get_snap_node(j);
float c = cos(sn.rotation);
float s = sin(sn.rotation);
float dx = gpointer.x-sn.position.x;
track->set_rotation(dir);
if(!trks.empty())
- track->snap_to(*trks.back(), true);
+ track->link_to(*trks.back());
trks.push_back(track);
pos.x += c**i;