set<Track *>::iterator nb = neighbors.begin();
int epi = (*nb)->get_endpoint_by_link(*order.front().track);
- float start_z = (*nb)->get_endpoint_position(epi).z;
+ float start_z = (*nb)->get_snap_node(epi).position.z;
++nb;
epi = (*nb)->get_endpoint_by_link(*order.back().track);
- float end_z = (*nb)->get_endpoint_position(epi).z;
+ float end_z = (*nb)->get_snap_node(epi).position.z;
if(smooth)
{
float limit = designer.get_layout().get_catalogue().get_gauge()/10;
- Vector pos1;
- float dir1;
+ Snap sn1;
bool ok = false;
float gap = 0;
for(unsigned i=0; i<track1->get_type().get_endpoints().size(); ++i)
if(track1->get_link(i))
continue;
- pos1 = track1->get_endpoint_position(i);
- dir1 = track1->get_endpoint_direction(i);
+ sn1 = track1->get_snap_node(i);
for(unsigned j=0; j<track2->get_type().get_endpoints().size(); ++j)
{
if(track2->get_link(j))
continue;
- Vector pos2 = track2->get_endpoint_position(j);
- float dir2 = track2->get_endpoint_direction(j);
+ Snap sn2 = track2->get_snap_node(j);
- float dz = pos2.z-pos1.z;
+ float dz = sn2.position.z-sn1.position.z;
if(abs(dz)>0.02)
continue;
- float adiff = dir1+M_PI-dir2;
+ float adiff = sn1.rotation+M_PI-sn2.rotation;
while(adiff<-M_PI)
adiff += M_PI*2;
while(adiff>M_PI)
if(abs(adiff)>0.01)
continue;
- float c = cos(dir1);
- float s = sin(dir1);
- float dx = pos2.x-pos1.x;
- float dy = pos2.y-pos1.y;
+ float c = cos(sn1.rotation);
+ float s = sin(sn1.rotation);
+ float dx = sn2.position.x-sn1.position.x;
+ float dy = sn2.position.y-sn1.position.y;
if(abs(dx*s-dy*c)>limit)
continue;
return;
}
- vector<Track *> trks = create_straight(pos1, dir1, gap, limit);
+ vector<Track *> trks = create_straight(sn1.position, sn1.rotation, gap, limit);
if(trks.empty())
{
if(track->get_link(j))
continue;
- Vector ep_pos = track->get_endpoint_position(j);
- float ep_dir = track->get_endpoint_direction(j);
- float c = cos(ep_dir);
- float s = sin(ep_dir);
- float dx = gpointer.x-ep_pos.x;
- float dy = gpointer.y-ep_pos.y;
+ Snap sn = track->get_snap_node(j);
+ float c = cos(sn.rotation);
+ float s = sin(sn.rotation);
+ float dx = gpointer.x-sn.position.x;
+ float dy = gpointer.y-sn.position.y;
float len = dx*c+dy*s;
if(len<length)
continue;
- pos = ep_pos;
- dir = ep_dir;
+ pos = sn.position;
+ dir = sn.rotation;
length = len;
}
}
unsigned n_endpoints = track->get_type().get_endpoints().size();
for(unsigned j=0; j<n_endpoints; ++j)
{
- Vector p = track->get_endpoint_position(j);
+ Vector p = track->get_snap_node(j).position;
if(i==objects.begin() && j==0)
minp = maxp = p;
else