Author: sega
Date: 2009-02-16 20:42:09 +0100 (Mon, 16 Feb 2009)
New Revision: 1667

Added:
   trunk/pkg/common/DataClass/Widgets/
   trunk/pkg/common/DataClass/Widgets/ColorScale.cpp
   trunk/pkg/common/DataClass/Widgets/ColorScale.hpp
   trunk/pkg/common/RenderingEngine/GLDrawWidgets/
   trunk/pkg/common/RenderingEngine/GLDrawWidgets/GLDrawColorScale.cpp
   trunk/pkg/common/RenderingEngine/GLDrawWidgets/GLDrawColorScale.hpp
Modified:
   trunk/gui/py/utils.py
   trunk/pkg/common/Engine/FilterEngine/ColorizedVelocityFilter.cpp
   trunk/pkg/common/Engine/FilterEngine/ColorizedVelocityFilter.hpp
   trunk/pkg/common/SConscript
Log:
1. The experimental widget for drawing a color scale for colorized velocity 
filter. 
2. Convenient python function utils.ColorizedVelocityFilter.


Modified: trunk/gui/py/utils.py
===================================================================
--- trunk/gui/py/utils.py       2009-02-16 09:28:32 UTC (rev 1666)
+++ trunk/gui/py/utils.py       2009-02-16 19:42:09 UTC (rev 1667)
@@ -396,3 +396,7 @@
        
                
 
+def 
ColorizedVelocityFilter(isFilterActivated=True,autoScale=True,minValue=0,maxValue=0,posX=0,posY=0.2,width=0.05,height=0.5,title='Velocity,
 m/s'):
+       f = 
DeusExMachina('ColorizedVelocityFilter',{'isFilterActivated':isFilterActivated,'autoScale':autoScale,'minValue':minValue,'maxValue':maxValue,'posX':posX,'posY':posY,'width':width,'height':height,'title':title})
+       O.engines+=[f]
+       return f

Added: trunk/pkg/common/DataClass/Widgets/ColorScale.cpp
===================================================================
--- trunk/pkg/common/DataClass/Widgets/ColorScale.cpp   2009-02-16 09:28:32 UTC 
(rev 1666)
+++ trunk/pkg/common/DataClass/Widgets/ColorScale.cpp   2009-02-16 19:42:09 UTC 
(rev 1667)
@@ -0,0 +1,39 @@
+/*************************************************************************
+*  Copyright (C) 2009 by Sergei Dorofeenko                              *
+*  [email protected]                                                 *
+*                                                                        *
+*  This program is free software; it is licensed under the terms of the  *
+*  GNU General Public License v2 or later. See file LICENSE for details. *
+*************************************************************************/
+
+#include "ColorScale.hpp"
+#include<yade/lib-opengl/OpenGLWrapper.hpp>
+
+ColorScale::ColorScale () : GeometricalModel()
+{
+       createIndex();
+       posX=0;
+       posY=0.2;
+       width=0.05;
+       height=0.5;
+       title="";
+}
+
+
+ColorScale::~ColorScale ()
+{
+}
+
+
+void ColorScale::registerAttributes()
+{
+       GeometricalModel::registerAttributes();
+       REGISTER_ATTRIBUTE(posX);
+       REGISTER_ATTRIBUTE(posY);
+       REGISTER_ATTRIBUTE(width);
+       REGISTER_ATTRIBUTE(height);
+       REGISTER_ATTRIBUTE(title);
+}
+
+
+YADE_PLUGIN();

Added: trunk/pkg/common/DataClass/Widgets/ColorScale.hpp
===================================================================
--- trunk/pkg/common/DataClass/Widgets/ColorScale.hpp   2009-02-16 09:28:32 UTC 
(rev 1666)
+++ trunk/pkg/common/DataClass/Widgets/ColorScale.hpp   2009-02-16 19:42:09 UTC 
(rev 1667)
@@ -0,0 +1,34 @@
+/*************************************************************************
+*  Copyright (C) 2009 by Sergei Dorofeenko                              *
+*  [email protected]                                                 *
+*                                                                        *
+*  This program is free software; it is licensed under the terms of the  *
+*  GNU General Public License v2 or later. See file LICENSE for details. *
+*************************************************************************/
+
+#pragma once
+
+#include<yade/core/GeometricalModel.hpp>
+
+class ColorScale : public GeometricalModel {
+    public :
+    Real posX,posY;
+    Real width,height;
+       string title;
+
+       vector<Vector3r> colors;
+       vector<string>   labels;
+
+       ColorScale ();
+       virtual ~ColorScale ();
+
+    protected :
+           void registerAttributes();
+    REGISTER_CLASS_NAME(ColorScale);
+    REGISTER_BASE_CLASS_NAME(GeometricalModel);
+    REGISTER_CLASS_INDEX(ColorScale,GeometricalModel);
+};
+
+REGISTER_SERIALIZABLE(ColorScale);
+
+

Modified: trunk/pkg/common/Engine/FilterEngine/ColorizedVelocityFilter.cpp
===================================================================
--- trunk/pkg/common/Engine/FilterEngine/ColorizedVelocityFilter.cpp    
2009-02-16 09:28:32 UTC (rev 1666)
+++ trunk/pkg/common/Engine/FilterEngine/ColorizedVelocityFilter.cpp    
2009-02-16 19:42:09 UTC (rev 1667)
@@ -7,6 +7,7 @@
 *************************************************************************/
 
 #include"ColorizedVelocityFilter.hpp"
+#include <yade/pkg-common/ColorScale.hpp>
 
 CREATE_LOGGER(ColorizedVelocityFilter);
 
@@ -21,6 +22,12 @@
        prevIteration=0;
        dt=0;
        subscrBodies.clear();
+
+       posX=0;
+       posY=0.2;
+       width=0.05;
+       height=0.5;
+       title="Velocity, m/s";
 }
 
 
@@ -40,6 +47,12 @@
        REGISTER_ATTRIBUTE(onlyDynamic);
        REGISTER_ATTRIBUTE(minValue);
        REGISTER_ATTRIBUTE(maxValue);
+
+       REGISTER_ATTRIBUTE(posX);
+       REGISTER_ATTRIBUTE(posY);
+       REGISTER_ATTRIBUTE(width);
+       REGISTER_ATTRIBUTE(height);
+       REGISTER_ATTRIBUTE(title);
 }
 
 void ColorizedVelocityFilter::applyCondition(MetaBody* ncb)
@@ -57,7 +70,8 @@
                prevPositions[i] = currPos;
        }
        prevIteration = currIteration;
-       if (autoScale) makeScale();
+       makeScale();
+       updateColorScale();
        for (int i=0,e=subscrBodies.size(); i<e; ++i)
        {
                shared_ptr<Body> b =(*bodies)[subscrBodies[i]]; 
@@ -65,6 +79,46 @@
        }
 }
 
+void ColorizedVelocityFilter::updateColorScale()
+{
+       legend->posX = posX; 
+       legend->posY = posY; 
+       legend->width = width; 
+       legend->height = height; 
+
+       if (cur_minValue==minValue && cur_maxValue==maxValue) return;
+
+       cur_minValue=minValue;
+       cur_maxValue=maxValue;
+       legend->colors.resize(3);
+       Real h = (maxValue-minValue)/(legend->colors.size()-1);
+       for(unsigned int i=0; i<legend->colors.size(); ++i)
+               legend->colors[i] = getColor4Value(minValue+h*i);
+
+       legend->labels.resize(5);
+       h = (maxValue-minValue)/(legend->labels.size()-1);
+       for(unsigned int i=0; i<legend->labels.size(); ++i)
+       {
+               char tmp[64];
+               sprintf(tmp, "%6.3f", minValue+h*i);
+               legend->labels[i]=string(tmp);
+       }
+}
+
+void ColorizedVelocityFilter::makeScale()
+{
+       if (autoScale)
+       {
+               minValue=maxValue=values[0];
+               for(int i=0,e=values.size(); i<e; ++i)
+               {
+                       if (values[i]<minValue) minValue = values[i];
+                       if (values[i]>maxValue) maxValue = values[i];
+               }
+               LOG_INFO("minValue:" << minValue << '\t' << "maxValue:" << 
maxValue);
+       }
+}
+
 Vector3r ColorizedVelocityFilter::getColor4Value(Real v)
 {
        Vector3r color;
@@ -84,22 +138,18 @@
        return color;
 }
 
-
-void ColorizedVelocityFilter::makeScale()
-{
-       minValue=maxValue=values[0];
-       for(int i=0,e=values.size(); i<e; ++i)
-       {
-               if (values[i]<minValue) minValue = values[i];
-               if (values[i]>maxValue) maxValue = values[i];
-       }
-       LOG_INFO("minValue:" << minValue << '\t' << "maxValue:" << maxValue);
-}
-
 void ColorizedVelocityFilter::initialize(MetaBody* ncb)
 {
        first=false;
 
+       widget = shared_ptr<Body>(new Body);
+       legend = shared_ptr<ColorScale>(new ColorScale);
+       widget->geometricalModel = legend;
+       legend->title = title;
+       widget->physicalParameters = shared_ptr<PhysicalParameters>(new 
PhysicalParameters);
+       widget->isDynamic=false;
+       ncb->bodies->insert(widget);
+
        if (onlyDynamic)
        {
                FOREACH(shared_ptr<Body> b, *ncb->bodies) { if(b->isDynamic) 
subscrBodies.push_back(b->getId()); }

Modified: trunk/pkg/common/Engine/FilterEngine/ColorizedVelocityFilter.hpp
===================================================================
--- trunk/pkg/common/Engine/FilterEngine/ColorizedVelocityFilter.hpp    
2009-02-16 09:28:32 UTC (rev 1666)
+++ trunk/pkg/common/Engine/FilterEngine/ColorizedVelocityFilter.hpp    
2009-02-16 19:42:09 UTC (rev 1667)
@@ -11,6 +11,8 @@
 #include<yade/pkg-common/FilterEngine.hpp>
 #include<yade/core/MetaBody.hpp>
 
+class ColorScale;
+
 class ColorizedVelocityFilter : public FilterEngine {
        protected:
                vector<Vector3r> prevPositions;
@@ -21,13 +23,22 @@
                bool first;
                void initialize(MetaBody*);
                void makeScale();
+               void updateColorScale();
                Vector3r getColor4Value(Real v);
+               shared_ptr<Body> widget;
+               shared_ptr<ColorScale> legend;
+               Real cur_minValue;
+               Real cur_maxValue;
        public :
                bool autoScale;
                bool onlyDynamic;
                Real minValue;
                Real maxValue;
 
+               Real posX,posY;
+               Real width,height;
+               string title;
+
                ColorizedVelocityFilter();
                virtual ~ColorizedVelocityFilter();
        

Added: trunk/pkg/common/RenderingEngine/GLDrawWidgets/GLDrawColorScale.cpp
===================================================================
--- trunk/pkg/common/RenderingEngine/GLDrawWidgets/GLDrawColorScale.cpp 
2009-02-16 09:28:32 UTC (rev 1666)
+++ trunk/pkg/common/RenderingEngine/GLDrawWidgets/GLDrawColorScale.cpp 
2009-02-16 19:42:09 UTC (rev 1667)
@@ -0,0 +1,67 @@
+/*************************************************************************
+*  Copyright (C) 2008 by Sergei Dorofeenko                              *
+*  [email protected]                                                 *
+*                                                                        *
+*  This program is free software; it is licensed under the terms of the  *
+*  GNU General Public License v2 or later. See file LICENSE for details. *
+*************************************************************************/
+
+#include "GLDrawColorScale.hpp"
+#include <GL/glut.h>
+#include <yade/pkg-common/ColorScale.hpp>
+#include<yade/lib-opengl/OpenGLWrapper.hpp>
+
+void GLDrawColorScale::go(const shared_ptr<GeometricalModel>& gm, const 
shared_ptr<PhysicalParameters>& ph,bool wire)
+{
+    ColorScale* cs = static_cast<ColorScale*>(gm.get());
+    
+       glMatrixMode(GL_PROJECTION);
+       glPushMatrix();
+       glLoadIdentity();
+       //int WinH = glutGet(GLUT_WINDOW_HEIGHT);
+       //int WinW = glutGet(GLUT_WINDOW_WIDTH);
+       //gluOrtho2D(0,WinW, 0,WinH);
+       gluOrtho2D(0.,1.,0.,1.);
+       glMatrixMode(GL_MODELVIEW);
+       glPushMatrix();
+       glLoadIdentity();
+       glDisable(GL_LIGHTING);
+
+       const Real oX = cs->posX;
+       const Real oY = cs->posY;
+       const Real w  = cs->width;
+       const vector<Vector3r>& colors = cs->colors;
+       const Real nbSteps = colors.size();
+       const Real hStep = cs->height/(nbSteps-1);
+       glBegin(GL_QUAD_STRIP);
+               for (int i=0; i<nbSteps; ++i)
+               {
+                 glColor3f(colors[i][0],colors[i][1],colors[i][2]);
+                 glVertex2f(oX, oY+i*hStep);
+                 glVertex2f(oX+w,oY+i*hStep);
+               }
+       glEnd();
+
+       const vector<string>& labels = cs->labels;
+       const int nbLabels = labels.size();
+       const Real lStep = cs->height/(nbLabels-1);
+       for (int i=0; i<nbLabels; ++i)
+       {
+               glColor3f(1.,1.,1.);
+               glRasterPos2f(oX+w,oY+i*lStep);
+               for(unsigned int j=0;j<labels[i].length();j++)
+                       glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, 
labels[i][j]);
+       }
+
+       glColor3f(1.,1.,1.);
+       glRasterPos2f(oX,oY+(nbSteps-1)*hStep+0.05);
+       for(unsigned int i=0;i<cs->title.length();i++)
+               glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, cs->title[i]);
+
+       glPopMatrix();
+       glMatrixMode(GL_PROJECTION);
+       glPopMatrix();
+       glMatrixMode(GL_MODELVIEW);     
+
+}
+YADE_PLUGIN();

Added: trunk/pkg/common/RenderingEngine/GLDrawWidgets/GLDrawColorScale.hpp
===================================================================
--- trunk/pkg/common/RenderingEngine/GLDrawWidgets/GLDrawColorScale.hpp 
2009-02-16 09:28:32 UTC (rev 1666)
+++ trunk/pkg/common/RenderingEngine/GLDrawWidgets/GLDrawColorScale.hpp 
2009-02-16 19:42:09 UTC (rev 1667)
@@ -0,0 +1,26 @@
+/*************************************************************************
+*  Copyright (C) 2008 by Sergei Dorofeenko                              *
+*  [email protected]                                                 *
+*                                                                        *
+*  This program is free software; it is licensed under the terms of the  *
+*  GNU General Public License v2 or later. See file LICENSE for details. *
+*************************************************************************/
+
+#pragma once
+
+#include<yade/pkg-common/GLDrawFunctors.hpp>
+
+class GLDrawColorScale : public GLDrawGeometricalModelFunctor
+{
+       
+       public :
+               virtual void go(const shared_ptr<GeometricalModel>&, const 
shared_ptr<PhysicalParameters>&,bool);
+               
+       RENDERS(ColorScale);
+       REGISTER_CLASS_NAME(GLDrawColorScale);
+       REGISTER_BASE_CLASS_NAME(GLDrawGeometricalModelFunctor);
+};
+
+REGISTER_SERIALIZABLE(GLDrawColorScale);
+
+

Modified: trunk/pkg/common/SConscript
===================================================================
--- trunk/pkg/common/SConscript 2009-02-16 09:28:32 UTC (rev 1666)
+++ trunk/pkg/common/SConscript 2009-02-16 19:42:09 UTC (rev 1667)
@@ -47,6 +47,7 @@
        
env.SharedLibrary('Tetrahedron',['DataClass/GeometricalModel/Tetrahedron.cpp']),
        
env.SharedLibrary('Quadrilateral',['DataClass/GeometricalModel/Quadrilateral.cpp']),
        env.SharedLibrary('Facet',['DataClass/GeometricalModel/Facet.cpp']),
+       env.SharedLibrary('ColorScale',['DataClass/Widgets/ColorScale.cpp']),
        
env.SharedLibrary('MomentEngine',['Engine/DeusExMachina/MomentEngine.cpp'],
                LIBS=env['LIBS']+['Momentum','ParticleParameters']),
        
env.SharedLibrary('ForceEngine',['Engine/DeusExMachina/ForceEngine.cpp'],
@@ -110,7 +111,7 @@
        
env.SharedLibrary('ColorizedLayerFilter',['Engine/FilterEngine/ColorizedLayerFilter.cpp'],
                LIBS=env['LIBS']+['FilterEngine']),
        
env.SharedLibrary('ColorizedVelocityFilter',['Engine/FilterEngine/ColorizedVelocityFilter.cpp'],
-               LIBS=env['LIBS']+['FilterEngine']),
+               LIBS=env['LIBS']+['FilterEngine','ColorScale']),
        
env.SharedLibrary('BoundingVolumeMetaEngine',['Engine/MetaEngine/BoundingVolumeMetaEngine.cpp']),
        
env.SharedLibrary('GeometricalModelMetaEngine',['Engine/MetaEngine/GeometricalModelMetaEngine.cpp']),
        
env.SharedLibrary('InteractingGeometryMetaEngine',['Engine/MetaEngine/InteractingGeometryMetaEngine.cpp']),
@@ -196,6 +197,8 @@
        
env.SharedLibrary('GLDrawNormalInteraction',['RenderingEngine/GLDrawInteractionPhysics/GLDrawNormalInteraction.cpp'],LIBS=env['LIBS']+['yade-opengl','NormalShearInteractions']),
        
env.SharedLibrary('GLDrawParticleState',['RenderingEngine/GLDrawState/GLDrawParticleState.cpp'],
                
LIBS=env['LIBS']+['yade-base','ParticleParameters','yade-opengl']),
+       
env.SharedLibrary('GLDrawColorScale',['RenderingEngine/GLDrawWidgets/GLDrawColorScale.cpp'],
+               LIBS=env['LIBS']+['yade-base','ColorScale','yade-opengl']),
        
env.SharedLibrary('GLDrawRigidBodyState',['RenderingEngine/GLDrawState/GLDrawRigidBodyState.cpp'],
                
LIBS=env['LIBS']+['ParticleParameters','RigidBodyParameters','GLDrawParticleState','yade-opengl']),
        
env.SharedLibrary('OpenGLRenderingEngine',['RenderingEngine/OpenGLRenderingEngine/OpenGLRenderingEngine.cpp'],


_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to