Skip to content
Snippets Groups Projects
Commit b27653ef authored by Ansgar Philippsen's avatar Ansgar Philippsen
Browse files

fixed view update in gfx entity

parent dae2c931
No related branches found
No related tags found
No related merge requests found
......@@ -222,31 +222,19 @@ void Entity::SetBlurFactors(float bf1,float bf2)
void Entity::Rebuild()
{
geom::Vec3 delta=GetTF().GetTrans()-GetTF().GetCenter();
do_update_view(); // if necessary, update the views
this->ReapplyColorOps(); // re-color everything
if(update_view_) {
EntityView nv=this->GetView();
trace_.ResetView(nv);
for (RendererMap::iterator i=renderer_.begin(),
e=renderer_.end(); i!=e; ++i) {
impl::EntityRenderer* r=i->second;
if (r->IsEnabled() && r->HasDataToRender()) {
i->second->ClearViews();
i->second->AddView(nv);
i->second->UpdateViews();
i->second->PrepareRendering();
}
}
}
FlagRebuild(); // force renderer rebuilds in RenderGL call
Scene::Instance().RequestRedraw();
this->ReapplyColorOps();
FlagRebuild();
// update center in transformation
geom::Vec3 center=this->GetCenter();
Transform tf=this->GetTF();
tf.SetCenter(center);
tf.SetTrans(center+delta);
tf.SetTrans(center+GetTF().GetTrans()-GetTF().GetCenter());
this->SetTF(tf);
Scene::Instance().RequestRedraw();
}
void Entity::UpdatePositions()
......@@ -256,6 +244,7 @@ void Entity::UpdatePositions()
impl::EntityRenderer* r=i->second;
r->FlagPositionsDirty();
}
// Rebuild() here causes an recursive loop...
FlagRebuild();
Scene::Instance().RequestRedraw();
}
......@@ -845,10 +834,7 @@ void Entity::ColorBy(const String& prop,
mol::EntityView Entity::GetView() const
{
if (update_view_) {
update_view_=false;
cached_view_=qv_.GetEntityView();
}
do_update_view();
return cached_view_;
}
......@@ -1018,11 +1004,12 @@ void Entity::ReapplyColorOps()
GfxObj::ReapplyColorOps();
}
void Entity::UpdateView()
void Entity::UpdateView()
{
update_view_=true;
update_view_=true;
Rebuild();
UpdatePositions();
FlagRebuild();
Scene::Instance().RequestRedraw();
}
void Entity::SetSeqHack(bool b)
......@@ -1030,6 +1017,7 @@ void Entity::SetSeqHack(bool b)
if(b!=trace_.GetSeqHack()) {
trace_.SetSeqHack(b);
FlagRebuild();
Scene::Instance().RequestRedraw();
}
}
......@@ -1038,4 +1026,25 @@ bool Entity::GetSeqHack() const
return trace_.GetSeqHack();
}
void Entity::do_update_view() const
{
// also signals an update in positions
if (update_view_) {
update_view_=false;
cached_view_=qv_.GetEntityView();
trace_.ResetView(cached_view_);
for (RendererMap::iterator i=renderer_.begin(),
e=renderer_.end(); i!=e; ++i) {
impl::EntityRenderer* r=i->second;
if (r->IsEnabled() && r->HasDataToRender()) {
r->ClearViews();
r->AddView(cached_view_);
r->UpdateViews();
r->FlagPositionsDirty();
r->PrepareRendering();
}
}
}
}
}} // ns
......@@ -155,8 +155,12 @@ public:
void Rebuild();
/// \brief only grab updated positions, dont rebuild the whole thing
/// views won't be regenerated from stored queries
void UpdatePositions();
/// \brief forces all views to be regenerated from stored queries
void UpdateView();
/// \brief set color for selection
void SetColor(const Color& col, const String& selection=String(""));
......@@ -276,8 +280,6 @@ public:
RenderOptionsPtr& render_options);
bool HasSelection() const;
void UpdateView();
void SetSeqHack(bool b);
bool GetSeqHack() const;
......@@ -298,12 +300,13 @@ private:
mutable geom::AlignedCuboid bbox_;
mol::EntityView sel_;
bool sel_update_;
impl::BackboneTrace trace_;
mutable impl::BackboneTrace trace_;
void init(RenderMode::Type);
void set_static_max_rad();
void do_update_view() const;
typedef boost::ptr_map<RenderMode::Type, impl::EntityRenderer> RendererMap;
mutable RendererMap renderer_;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment