mode = ELEVATE;
}
-void Manipulator::start_extend()
+bool Manipulator::start_extend()
{
if(mode)
cancel();
- mode = EXTEND;
+ bool ok = false;
+ const set<Track *> &stracks = selection.get_tracks();
+ for(set<Track *>::const_iterator i=stracks.begin(); (!ok && i!=stracks.end()); ++i)
+ {
+ const vector<Track *> &links = (*i)->get_links();
+ for(vector<Track *>::const_iterator j=links.begin(); (!ok && j!=links.end()); ++j)
+ ok = !*j;
+ }
+
+ if(ok)
+ mode = EXTEND;
+ else
+ signal_status.emit("No free endpoints");
+
+ return ok;
}
void Manipulator::duplicate()
void Manipulator::pointer_motion(int x, int y)
{
- pointer_y = y;
- gpointer = designer.map_pointer_to_ground(x, event_source.get_height()-1-y);
+ pointer_y = event_source.get_height()-1-y;
+ gpointer = designer.map_pointer_to_ground(x, pointer_y);
if(mode==MOVE)
{
}
else if(mode==ELEVATE)
{
- float dz = (y-elev_origin)/1000.;
+ float dz = (pointer_y-elev_origin)/1000.;
signal_status.emit(format("Elevation: %+.0fmm (%.0fmm)", dz*1000, (center.z+dz)*1000));