Manipulator* ScaleTool::CreateManipulator ( Viewer* v, Event& e, Transformer* rel ) { GraphicView* views = v->GetGraphicView(); Selection* s = v->GetSelection(), *newSel; GraphicView* gv; Manipulator* m = nil; Iterator i; newSel = views->ViewIntersecting(e.x-SLOP, e.y-SLOP, e.x+SLOP, e.y+SLOP); if (newSel->IsEmpty()) { s->Clear(); } else { newSel->First(i); gv = newSel->GetView(i); if (s->Includes(gv)) { s->Remove(gv); s->Prepend(gv); } else { s->Clear(); s->Append(gv); s->Update(); } m = gv->CreateManipulator(v, e, rel, this); } delete newSel; return m; }
Manipulator* ExamineTool::CreateManipulator ( Viewer* v, Event& e, Transformer* t ){ GraphicView* views = v->GetGraphicView(); Selection* s = v->GetSelection(); _selPath = new Selection; Manipulator* m = nil; s->Clear(); ComputeViewPath(e, views, _selPath); _shift = e.shift_is_down(); if (!_selPath->IsEmpty()) { Iterator i; _selPath->First(i); GraphicView* gv = _selPath->GetView(i); s->Append(gv); s->Update(); _selPath->Last(i); gv = _selPath->GetView(i); m = gv->CreateManipulator(v, e, t, this); } delete _selPath; return m; }
Manipulator* NarrowTool::CreateManipulator (Viewer* v, Event& e,Transformer*){ Manipulator* m = nil; _popup = false; GraphicView* views = v->GetGraphicView(); if (!e.shift_is_down()) { Selection* s = v->GetSelection(), *newSel = new Selection; s->Clear(); ComputeViewPath(e, views, newSel); if (!newSel->IsEmpty()) { Iterator i; newSel->First(i); GraphicView* gv = newSel->GetView(i); s->Append(gv); s->Update(); m = CreatePopupManip(newSel, v); _popup = true; } delete newSel; } else { m = new NarrowManip(v); } return m; }
Command* ReshapeTool::InterpretManipulator (Manipulator* m) { Selection* s; Command* cmd = nil; Iterator i; if (m != nil) { s = m->GetViewer()->GetSelection(); s->First(i); cmd = s->GetView(i)->InterpretManipulator(m); s->Update(); } return cmd; }