1 // PCL 2 #include <pcl/outofcore/visualization/object.h> 3 #include <pcl/outofcore/visualization/scene.h> 4 5 // Operators 6 // ----------------------------------------------------------------------------- Object(std::string name)7Object::Object (std::string name) 8 { 9 name_ = name; 10 11 actors_ = vtkSmartPointer<vtkActorCollection>::New (); 12 } 13 14 // Accessors 15 // ----------------------------------------------------------------------------- 16 std::string getName() const17Object::getName () const 18 { 19 return name_; 20 } 21 22 void setName(std::string name)23Object::setName (std::string name) 24 { 25 name_ = name; 26 } 27 28 vtkSmartPointer<vtkActorCollection> getActors()29Object::getActors () 30 { 31 return actors_; 32 } 33 34 void render(vtkRenderer * renderer)35Object::render (vtkRenderer* renderer) 36 { 37 std::lock_guard<std::mutex> lock (actors_mutex_); 38 // Iterate over the objects actors 39 actors_->InitTraversal (); 40 for (vtkIdType i = 0; i < actors_->GetNumberOfItems (); i++) 41 { 42 vtkActor* actor = actors_->GetNextActor (); 43 44 // If the actor hasn't been added to the renderer add it 45 std::set<vtkRenderer*>::iterator renderer_it; 46 renderer_it = associated_renderers_[actor].find (renderer); 47 if (renderer_it == associated_renderers_[actor].end ()) 48 { 49 associated_renderers_[actor].insert (renderer); 50 renderer->AddActor (actor); 51 } 52 } 53 } 54 55 bool hasActor(vtkActor * actor)56Object::hasActor (vtkActor *actor) 57 { 58 std::lock_guard<std::mutex> lock (actors_mutex_); 59 60 return actors_->IsItemPresent (actor); 61 } 62 63 void addActor(vtkActor * actor)64Object::addActor (vtkActor *actor) 65 { 66 // Scene::instance ()->lock (); 67 std::lock_guard<std::mutex> lock (actors_mutex_); 68 69 if (!actors_->IsItemPresent (actor)) 70 actors_->AddItem (actor); 71 72 // If the actor doesn't exist in the associated_renderers_ map add it 73 std::map<vtkActor*, std::set<vtkRenderer*> >::iterator actor_it; 74 actor_it = associated_renderers_.find (actor); 75 if (actor_it == associated_renderers_.end ()) 76 { 77 associated_renderers_[actor] = std::set<vtkRenderer*> (); 78 } 79 // Scene::instance ()->unlock (); 80 81 // Scene *scene = Scene::instance(); 82 // std::vector<Viewport*> viewports = scene->getViewports(); 83 // for(int i=0; i < viewports.size(); i++) 84 // { 85 // 86 // vtkRenderer *renderer = viewports[i]->getRenderer(); 87 // // If the actor hasn't been added to the renderer add it 88 // std::set<vtkRenderer*>::iterator renderer_it; 89 // renderer_it = associated_renderers_[actor].find(renderer); 90 // if (renderer_it == associated_renderers_[actor].end()) 91 // { 92 // associated_renderers_[actor].insert(renderer); 93 // renderer->AddActor(actor); 94 // } 95 // } 96 } 97 98 void removeActor(vtkActor * actor)99Object::removeActor (vtkActor *actor) 100 { 101 // Scene::instance ()->lock (); 102 //std::cout << "Removing Actor" << std::endl; 103 std::lock_guard<std::mutex> lock (actors_mutex_); 104 actors_->RemoveItem (actor); 105 106 std::map<vtkActor*, std::set<vtkRenderer*> >::iterator actor_it; 107 actor_it = associated_renderers_.find (actor); 108 109 if (actor_it != associated_renderers_.end ()) 110 { 111 for (auto renderer_it = associated_renderers_[actor].cbegin (); renderer_it != associated_renderers_[actor].cend (); 112 ++renderer_it) 113 { 114 (*renderer_it)->RemoveActor (actor); 115 } 116 associated_renderers_.erase (actor); 117 } 118 //std::cout << "Removing Actor - DONE" << std::endl; 119 // Scene::instance ()->unlock (); 120 } 121