Skip to content
Snippets Groups Projects
Select Git revision
  • 22760b424639040f69e9e089ce80ac67846feefa
  • master default protected
  • develop protected
  • conda
  • 3.6.0
  • 3.5.0
  • 3.4.2
  • 3.4.1
  • 3.4.0
  • 3.4.0-rc2
  • 3.4.0-rc
  • 3.3.1
  • 3.3.1-rc
  • 3.3.0
  • 3.3.0-rc2
  • 3.3.0-rc
  • 3.2.1
  • 3.2.1-rc
  • 3.2.0
  • 3.2.0-rc
  • 3.1.1
  • 3.1.1-rc2
  • 3.1.1-rc
  • 3.1.0
24 results

searchtools.js

Blame
  • entity_renderer.cc 5.00 KiB
    //------------------------------------------------------------------------------
    // This file is part of the OpenStructure project <www.openstructure.org>
    //
    // Copyright (C) 2008-2010 by the OpenStructure authors
    //
    // This library is free software; you can redistribute it and/or modify it under
    // the terms of the GNU Lesser General Public License as published by the Free
    // Software Foundation; either version 3.0 of the License, or (at your option)
    // any later version.
    // This library is distributed in the hope that it will be useful, but WITHOUT
    // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    // FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
    // details.
    //
    // You should have received a copy of the GNU Lesser General Public License
    // along with this library; if not, write to the Free Software Foundation, Inc.,
    // 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    //------------------------------------------------------------------------------
    /*
      Author: Stefan Scheuber, Marco Biasini
    */
    
    #include <ost/gfx/gl_helper.hh>
    
    #include <ost/mol/view_op.hh>
    
    #include <ost/gfx/input.hh>
    #include <ost/gfx/gfx_object.hh>
    #include <ost/gfx/scene.hh>
    
    #include "entity_renderer.hh"
    
    #if OST_SHADER_SUPPORT_ENABLED
    #include <ost/gfx/shader.hh>
    #endif //OST_SHADER_SUPPORT_ENABLED
    
    namespace ost { namespace gfx { namespace impl {
    
    EntityRenderer::EntityRenderer():
      name_(""),
      enabled_(true)
    {}
    
    void EntityRenderer::FlagPositionsDirty()
    {
      state_|=DIRTY_VA;
      sel_state_|=DIRTY_VA;
    }
    
     void EntityRenderer::Debug(unsigned int flags)
     {
       debug_flags_=flags;
       va_.DrawNormals(debug_flags_&0x1);
     }
    
    const String& EntityRenderer::GetName() const{
      return name_;
    }
    
    void EntityRenderer::SetName(const String& name)
    {
      name_=name;
    }
    
    void EntityRenderer::SetEnabled(bool enabled){
      enabled_=enabled;
    }
    
    bool EntityRenderer::IsEnabled() const
    {
      return enabled_;
    }
    
    const Color& EntityRenderer::GetSelectionColor() const
    {
      static Color selection_color(0.3,0.9,0.1,0.6);  
      return selection_color;
    }
    
    const Color& EntityRenderer::GetSelectionColorOutline() const
    {
    #if OST_SHADER_SUPPORT_ENABLED
      static Color selection_color_outline(0.3,0.9,0.1,1.0);
    #else
      static Color selection_color_outline=this->GetSelectionColor();
    #endif
      return selection_color_outline;
    }
    
    bool EntityRenderer::IsDirty() const
    {
      return sel_state_ || state_;
    }
    
    void EntityRenderer::AddView(const mol::EntityView& view)
    {
      full_view_=full_view_.IsValid() ? Union(full_view_, view) : view.Copy();
      effective_view_=hidden_view_.IsValid() ? mol::Difference(full_view_,hidden_view_): full_view_;
    
      state_=DIRTY_VIEW|DIRTY_VA;
      sel_state_=DIRTY_VIEW|DIRTY_VA;
    }
    
    void EntityRenderer::SubstractView(const mol::EntityView& view)
    {
      if (full_view_.IsValid()) {
        full_view_=mol::Difference(full_view_, view);
        effective_view_=hidden_view_.IsValid() ? mol::Difference(full_view_,hidden_view_): full_view_;
      }
      state_=DIRTY_VIEW|DIRTY_VA;
      sel_state_=DIRTY_VIEW|DIRTY_VA;
    }
    
    void EntityRenderer::ClearViews()
    {
      if (full_view_.IsValid() && full_view_.GetAtomCount()>0) {
        full_view_=full_view_.CreateEmptyView();
        if(effective_view_.IsValid()){
          effective_view_=effective_view_.CreateEmptyView();
        }
        full_sel_=full_view_.CreateEmptyView();
        sel_=full_view_.CreateEmptyView();
        state_=DIRTY_VIEW|DIRTY_VA;
        sel_state_=DIRTY_VIEW|DIRTY_VA;    
      }
    }
    
    bool EntityRenderer::HasDataToRender() const
    {
      return effective_view_ && effective_view_.GetAtomCount()>0;
    }
    
    mol::EntityView EntityRenderer::GetFullView()
    {
      return full_view_;
    }
    
    mol::EntityView EntityRenderer::GetEffectiveView()
    {
      return effective_view_;
    }
    
    void EntityRenderer::Render(RenderPass pass)
    {
      assert(sel_state_==0 && state_==0);
      if (pass==STANDARD_RENDER_PASS) {
        va_.DrawNormals(debug_flags_&0x1);
        va_.RenderGL();
      } else if (pass==GLOW_RENDER_PASS && this->HasSelection()) {
        sel_va_.RenderGL();
      }
    }
    
    void EntityRenderer::RenderPov(PovState& pov, const std::string& name)
    {
      va_.RenderPov(pov,name);
    }
    
    bool EntityRenderer::HasSelection() const
    {
      return (sel_.IsValid() && sel_.GetAtomCount()>0);
    }
    
    void EntityRenderer::SetSelection(const mol::EntityView& sel)
    {
      if(sel.IsValid()){
        full_sel_=sel;
        sel_=(hidden_view_.IsValid())? mol::Difference(full_sel_,hidden_view_) : full_sel_;
        sel_state_=DIRTY_VIEW|DIRTY_VA;
      }
    }
    
    void EntityRenderer::SetVisible(const mol::EntityView& view, bool visible)
    {
      if(visible){
        if(hidden_view_.IsValid()){
          hidden_view_=mol::Difference(hidden_view_, view);
        }
      }
      else{
        hidden_view_=hidden_view_.IsValid() ? Union(hidden_view_, view) : view.Copy();
      }
    
      if(sel_.IsValid()){
        sel_= hidden_view_.IsValid() ? mol::Difference(full_sel_,hidden_view_) : sel_;
      }
    
      if(full_view_.IsValid()){
        effective_view_=hidden_view_.IsValid() ? mol::Difference(full_view_,hidden_view_): full_view_;
      }
      state_=DIRTY_VIEW|DIRTY_VA;
      sel_state_=DIRTY_VIEW|DIRTY_VA;
    }
    
    void EntityRenderer::RenderOptionsChanged()
    {
      state_=DIRTY_VA;
      sel_state_=DIRTY_VA;
    }
    
    }}}