Skip to content
Snippets Groups Projects
Select Git revision
  • c732604a4624b5525c1ae2f7d042c86ae7cacf6c
  • master default protected
  • develop protected
  • cmake_boost_refactor
  • ubuntu_ci
  • mmtf
  • non-orthogonal-maps
  • no_boost_filesystem
  • data_viewer
  • 2.11.1
  • 2.11.0
  • 2.10.0
  • 2.9.3
  • 2.9.2
  • 2.9.1
  • 2.9.0
  • 2.8.0
  • 2.7.0
  • 2.6.1
  • 2.6.0
  • 2.6.0-rc4
  • 2.6.0-rc3
  • 2.6.0-rc2
  • 2.6.0-rc
  • 2.5.0
  • 2.5.0-rc2
  • 2.5.0-rc
  • 2.4.0
  • 2.4.0-rc2
29 results

custom_renderer.cc

Blame
  • user avatar
    stefan authored
    -Enable/Disable a rendermode
    -Get RenderMode name
    
    Added RenderModes to Scene Win
    
    
    git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1761 5a81b35b-ba03-0410-adc8-b2c5c5119f08
    c732604a
    History
    custom_renderer.cc 4.53 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
    //------------------------------------------------------------------------------
    #include "custom_renderer.hh"
    
    #include <ost/gfx/entity.hh>
    #include <ost/gfx/povray.hh>
    
    namespace ost {
    
    namespace gfx {
    
    using namespace impl;
    
    CustomRenderer::CustomRenderer(): options_(new CustomRenderOptions()) 
    {
      this->SetName("Ball & Stick");
      this->SetFixedPickRadius(0.2);
    }
    
    void CustomRenderer::PrepareRendering()
    {
      ConnectRendererBase::PrepareRendering();
      va_.Clear();
      this->PrepareRendering(view_, va_, false);
      sel_va_.Clear();
      if (this->HasSelection()) {
        this->PrepareRendering(sel_view_, sel_va_, true);
        sel_va_.SetLighting(false);
        sel_va_.SetColorMaterial(true);    
      }
    }
    
    void CustomRenderer::PrepareRendering(GfxView& view, 
                                          IndexedVertexArray& va, bool is_sel)
    {
      float plus=is_sel ? 0.05: 0.0;
      if(options_!=NULL){
        va.SetLighting(true);
        va.SetCullFace(true);
        va.SetColorMaterial(true);
        va.SetMode(0x4);
        // draw all spheres
        for (AtomEntryMap::const_iterator it=view.atom_map.begin();it!=view.atom_map.end();++it) {
          va.AddSphere(SpherePrim(it->second.atom.GetPos(),
                                  it->second.radius+plus,
                                  it->second.color),
                                  options_->GetSphereDetail());
        }
    
        for(BondEntryList::const_iterator it=view.bond_list.begin();it!=view.bond_list.end();++it) {
          const geom::Vec3& p0=it->bond.GetFirst().GetPos();
          const geom::Vec3& p2=it->bond.GetSecond().GetPos();
          geom::Vec3 p1=(p0+p2)*0.5;
          va.AddCylinder(CylinderPrim(p0,p1,it->radius+plus,it->atom1->color),
                         options_->GetArcDetail());
          va.AddCylinder(CylinderPrim(p1,p2,it->radius+plus,it->atom2->color),
                         options_->GetArcDetail());
        }
      }
      sel_state_=0;
      state_=0;
    }
    
    void CustomRenderer::RenderPov(PovState& pov, const std::string& name)
    {
      pov.write_merge_or_union(name);
      
      for (AtomEntryMap::const_iterator it=view_.atom_map.begin();it!=view_.atom_map.end();++it) {
        pov.write_sphere(it->second.atom.GetPos(),
                         it->second.radius,
                         it->second.color,
                         name);
      }
    
      for(BondEntryList::const_iterator it=view_.bond_list.begin();it!=view_.bond_list.end();++it) {
        const geom::Vec3& p0=it->bond.GetFirst().GetPos();
        const geom::Vec3& p2=it->bond.GetSecond().GetPos();
        geom::Vec3 p1=(p0+p2)*0.5;
        pov.write_cyl(p0,p1,it->radius,it->atom1->color,name,true);
        pov.write_cyl(p1,p2,it->radius,it->atom2->color,name,true);
      }
      pov.inc() << " }\n";
    }
    
    bool CustomRenderer::CanSetOptions(RenderOptionsPtr& render_options)
    {
     return render_options->GetRenderMode()==RenderMode::CUSTOM;
    }
    
    void CustomRenderer::SetOptions(RenderOptionsPtr& render_options)
    {
      options_ = boost::static_pointer_cast<CustomRenderOptions>(render_options);
      if(options_) {
        for (AtomEntryMap::iterator it=view_.atom_map.begin();it!=view_.atom_map.end();++it) {
          it->second.radius=options_->GetSphereRad();
        }
        for (AtomEntryMap::iterator it=sel_view_.atom_map.begin();it!=sel_view_.atom_map.end();++it) {
          it->second.radius=options_->GetSphereRad();
        }
    
        for(BondEntryList::iterator it=view_.bond_list.begin();it!=view_.bond_list.end();++it) {
          it->radius=options_->GetBondRad();
        }
        for(BondEntryList::iterator it=sel_view_.bond_list.begin();it!=sel_view_.bond_list.end();++it) {
          it->radius=options_->GetBondRad();
        }
      }
    }
    
    RenderOptionsPtr CustomRenderer::GetOptions()
    {
     return options_;
    }
    
    int CustomRenderer::GetMode()
    {
      return 0;
    }
    
    CustomRenderer::~CustomRenderer() 
    {
    }
    
    }} // ns