7 using namespace Marklin;
10 Measure::Measure(Designer &d):
20 void Measure::snap_to_tracks(Point &pt, float &dir)
22 const TrackSeq <racks=designer.get_layout()->get_tracks();
23 for(TrackSeq::const_iterator i=ltracks.begin(); i!=ltracks.end(); ++i)
24 if((*i)->snap(pt, dir))
28 void Measure::button_press(int, int, float gx, float gy, unsigned btn)
35 spoint=Point(gx, gy, 0);
37 snap_to_tracks(spoint, sdir);
53 void Measure::pointer_motion(int, int, float gx, float gy)
58 pointer=Point(gx, gy, 0);
60 snap_to_tracks(pointer, dir);
64 Point delta(pointer.x-spoint.x, pointer.y-spoint.y, 0);
68 par_dist=delta.x*c+delta.y*s;
69 perp_dist=delta.x*s-delta.y*c;
77 signal_changed.emit();
81 void Measure::render()
85 glTranslatef(spoint.x, spoint.y, spoint.z);
86 else if(state==STARTING)
87 glTranslatef(pointer.x, pointer.y, pointer.z);
89 glDisable(GL_CULL_FACE);
90 glColor4f(1, 1, 1, 1);
91 glBegin(GL_QUAD_STRIP);
92 for(unsigned i=0; i<=16; ++i)
94 float x=cos(i*M_PI/8)*0.005;
95 float y=sin(i*M_PI/8)*0.005;
97 glVertex3f(x, y, 0.01);
105 glBegin(GL_QUAD_STRIP);
107 glVertex3f(0, 0, 0.01);
108 glVertex3f(c*par_dist, s*par_dist, 0);
109 glVertex3f(c*par_dist, s*par_dist, 0.01);
110 glVertex3f(pointer.x-spoint.x, pointer.y-spoint.y, 0);
111 glVertex3f(pointer.x-spoint.x, pointer.y-spoint.y, 0.01);
112 /*glVertex3f(s*perp_dist, -c*perp_dist, 0);
113 glVertex3f(s*perp_dist, -c*perp_dist, 0.01);*/
115 glVertex3f(0, 0, 0.01);