Author: eudoxos
Date: 2008-09-29 08:37:41 +0200 (Mon, 29 Sep 2008)
New Revision: 1531

Added:
   trunk/gui/qt3/SnapshotEngine.cpp
   trunk/gui/qt3/SnapshotEngine.hpp
Modified:
   trunk/core/DefaultContainerImplementations/BodyRedirectionVector.cpp
   trunk/gui/py/yadeControl.cpp
   trunk/gui/qt3/GLViewer.cpp
   trunk/gui/qt3/qt.py
   trunk/pkg/common/Container/BodyAssocVector.cpp
   
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.cpp
   
trunk/pkg/dem/RenderingEngine/GLDrawSpheresContactGeometry/GLDrawSpheresContactGeometry.cpp
Log:
1. Add forgotten SnapshotEngine
2. BodyRedirectionVector always really find the lowest unused ID (the same for 
BodyAssocVector)
3. add Omega().interactions.clear() in python
4. Move the "Less than 500 bodies, moving possible" to LOG_INFO instead of 
on-screen since it disturbs videos taken during simulation...



Modified: trunk/core/DefaultContainerImplementations/BodyRedirectionVector.cpp
===================================================================
--- trunk/core/DefaultContainerImplementations/BodyRedirectionVector.cpp        
2008-09-28 12:37:30 UTC (rev 1530)
+++ trunk/core/DefaultContainerImplementations/BodyRedirectionVector.cpp        
2008-09-29 06:37:41 UTC (rev 1531)
@@ -73,7 +73,8 @@
 // FIXME - make sure that this is correct
 unsigned int BodyRedirectionVector::insert(shared_ptr<Body>& b)
 {
-       unsigned int position = b->getId();
+       //unsigned int position = b->getId();
+       unsigned position=0;
 
 //     std::vector< shared_ptr<Body> >::iterator tmpVii    = bodies.begin();
 //     std::vector< shared_ptr<Body> >::iterator tmpViiEnd = bodies.end();

Modified: trunk/gui/py/yadeControl.cpp
===================================================================
--- trunk/gui/py/yadeControl.cpp        2008-09-28 12:37:30 UTC (rev 1530)
+++ trunk/gui/py/yadeControl.cpp        2008-09-29 06:37:41 UTC (rev 1531)
@@ -289,6 +289,7 @@
        void clear(){proxee->clear();}
 };
 
+
 class pyTags{
        public:
                pyTags(const shared_ptr<MetaBody> _mb): mb(_mb){}
@@ -345,6 +346,7 @@
                        long i=0; FOREACH(const shared_ptr<Interaction>& I, 
*proxee){ if(!I->isReal) continue; if(i++==n) return pyInteraction(I); }
                        throw invalid_argument(string("Interaction number out 
of range (")+lexical_cast<string>(n)+">="+lexical_cast<string>(i)+").");
                }
+               void clear(){proxee->clear();}
 };
 
 
@@ -550,7 +552,8 @@
        
boost::python::class_<pyInteractionContainer>("InteractionContainer",python::init<pyInteractionContainer&>())
                .def("__iter__",&pyInteractionContainer::pyIter)
                .def("__getitem__",&pyInteractionContainer::pyGetitem)
-               .def("nth",&pyInteractionContainer::pyNth);
+               .def("nth",&pyInteractionContainer::pyNth)
+               .def("clear",&pyInteractionContainer::clear);
        
boost::python::class_<pyInteractionIterator>("InteractionIterator",python::init<pyInteractionIterator&>())
                .def("__iter__",&pyInteractionIterator::pyIter)
                .def("next",&pyInteractionIterator::pyNext);

Modified: trunk/gui/qt3/GLViewer.cpp
===================================================================
--- trunk/gui/qt3/GLViewer.cpp  2008-09-28 12:37:30 UTC (rev 1530)
+++ trunk/gui/qt3/GLViewer.cpp  2008-09-29 06:37:41 UTC (rev 1531)
@@ -312,8 +312,8 @@
        MetaBody* rb=Omega::instance().getRootBody().get();
        if (!rb) return;
 
-       if(rb->bodies->size() < 500) displayMessage("Less than 500 bodies, 
moving possible. Select with shift, press 'm' to move. Use / * - + for cutting 
plane.", 6000);
-       else displayMessage("More than 500 bodies. Moving not possible. Use / * 
- + for cutting plane.", 6000);
+       if(rb->bodies->size()<500){LOG_INFO("Less than 500 bodies, moving 
possible. Select with shift, press 'm' to move.");}
+       else{LOG_INFO("More than 500 bodies. Moving not possible.");}
        Vector3r min,max;       
        if(rb->boundingVolume){
                min=rb->boundingVolume->min; max=rb->boundingVolume->max;

Added: trunk/gui/qt3/SnapshotEngine.cpp
===================================================================
--- trunk/gui/qt3/SnapshotEngine.cpp    2008-09-28 12:37:30 UTC (rev 1530)
+++ trunk/gui/qt3/SnapshotEngine.cpp    2008-09-29 06:37:41 UTC (rev 1531)
@@ -0,0 +1,17 @@
+#include"SnapshotEngine.hpp"
+#include<sstream>
+#include<iomanip>
+CREATE_LOGGER(SnapshotEngine);
+void SnapshotEngine::action(MetaBody* rb){
+       shared_ptr<GLViewer> glv;
+       if(!YadeQtMainWindow::self || 
((size_t)viewNo>=YadeQtMainWindow::self->glViews.size()) || 
!(glv=YadeQtMainWindow::self->glViews[viewNo])){
+               if(!ignoreErrors) throw invalid_argument("View 
#"+lexical_cast<string>(viewNo)+" (SnapshotEngine::viewNo) doesn't exist.");
+               return;
+       }
+       ostringstream fss; 
fss<<fileBase<<setw(4)<<setfill('0')<<counter++<<".png";
+       LOG_DEBUG("GL view #"<<viewNo<<" → "<<fss.str())
+       glv->setSnapshotFormat("PNG");
+       glv->saveSnapshot(QString(fss.str()),/*overwrite*/ true);
+       savedSnapshots.push_back(fss.str());
+}
+

Added: trunk/gui/qt3/SnapshotEngine.hpp
===================================================================
--- trunk/gui/qt3/SnapshotEngine.hpp    2008-09-28 12:37:30 UTC (rev 1530)
+++ trunk/gui/qt3/SnapshotEngine.hpp    2008-09-29 06:37:41 UTC (rev 1531)
@@ -0,0 +1,38 @@
+#pragma once
+#include<yade/core/StandAloneEngine.hpp>
+#include<yade/gui-qt3/GLViewer.hpp>
+#include<yade/gui-qt3/YadeQtMainWindow.hpp>
+#include<yade/pkg-common/PeriodicEngines.hpp>
+/*! Engine for saving snapshots of GLView(s) as .png files.
+ *
+ * Derives from PeriodicEngine, which has detailed information on controlling 
periodicity.
+ *
+ * The files are named fileBase+counter+".png" (counter is left-padded by 0s, 
i.e. snap0004.png)
+ */
+class SnapshotEngine: public PeriodicEngine{
+       public:
+               //! Basename for snapshots
+               string fileBase;
+               //! Number appended to fileBase
+               int counter;
+               //! The GLView number that we save (default: 0, i.e. primary 
view)
+               int viewNo;
+               //! Silently return if selected view doesn't exist (default: 
true)
+               bool ignoreErrors;
+               //! files that have been created so far
+               vector<string> savedSnapshots;
+       SnapshotEngine():counter(0),viewNo(0),ignoreErrors(true){}
+       virtual void action(MetaBody*);
+       void registerAttributes(){      
+               PeriodicEngine::registerAttributes();
+               REGISTER_ATTRIBUTE(fileBase);
+               REGISTER_ATTRIBUTE(counter);
+               REGISTER_ATTRIBUTE(viewNo);
+               REGISTER_ATTRIBUTE(ignoreErrors);
+               REGISTER_ATTRIBUTE(savedSnapshots);
+       }
+       DECLARE_LOGGER;
+       REGISTER_CLASS_NAME(SnapshotEngine);
+       REGISTER_BASE_CLASS_NAME(PeriodicEngine);
+};
+REGISTER_SERIALIZABLE(SnapshotEngine,false);

Modified: trunk/gui/qt3/qt.py
===================================================================
--- trunk/gui/qt3/qt.py 2008-09-28 12:37:30 UTC (rev 1530)
+++ trunk/gui/qt3/qt.py 2008-09-29 06:37:41 UTC (rev 1531)
@@ -15,7 +15,7 @@
        viewNo is 0-based GL view number. 0 is the primary view and will be 
created if it doesn't exist.
        It is an error if viewNo>0 and the view doesn't exist.
 
-       The simulation will run until it stops by itself. Either set 
Omega().stopAtIteration or have an engine
+       The simulation will run until it stops by itself. Either set 
Omega().stopAtIter or have an engine
        that will call Omega().pause() at some point.
 
        See makePlayerVideo for more documentation.

Modified: trunk/pkg/common/Container/BodyAssocVector.cpp
===================================================================
--- trunk/pkg/common/Container/BodyAssocVector.cpp      2008-09-28 12:37:30 UTC 
(rev 1530)
+++ trunk/pkg/common/Container/BodyAssocVector.cpp      2008-09-29 06:37:41 UTC 
(rev 1531)
@@ -80,7 +80,8 @@
 //     BodyContainer::setId(b,max);
 //     return max;
 
-       unsigned int position = b->getId();
+       //unsigned int position = b->getId();
+       unsigned int position=0;
 
        Loki::AssocVector<unsigned int , shared_ptr<Body> >::const_iterator 
tmpBii;
        tmpBii = bodies.find(position);
@@ -88,8 +89,7 @@
        {
                // finds the first free key, which is bigger than 0 (was: 
newPoistion=position, i.e. greater than id... why?)
                unsigned int newPosition = 0;
-               while( bodies.find(newPosition) != bodies.end() )
-                       ++newPosition;
+               while( bodies.find(newPosition) != bodies.end() ) ++newPosition;
                //cerr << "WARNING: body id=\"" << position << "\" is already 
used. Using first free id=\"" << newPosition << "\", beware - if you are 
loading a file, this will break interactions for this body!\n";
                position = newPosition;
        }

Modified: 
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.cpp
===================================================================
--- 
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.cpp
       2008-09-28 12:37:30 UTC (rev 1530)
+++ 
trunk/pkg/dem/Engine/EngineUnit/InteractingFacet2InteractingSphere4SpheresContactGeometry.cpp
       2008-09-29 06:37:41 UTC (rev 1531)
@@ -122,7 +122,6 @@
                                
scm->cp2rel.Align(Vector3r::UNIT_X,se32.orientation.Conjugate()*(-normal));
                                scm->cp1rel.Normalize(); 
scm->cp2rel.Normalize();
                        }
-                       cerr<<"@@ "<<scm->epsT()<<endl;
                }
 
                return true;

Modified: 
trunk/pkg/dem/RenderingEngine/GLDrawSpheresContactGeometry/GLDrawSpheresContactGeometry.cpp
===================================================================
--- 
trunk/pkg/dem/RenderingEngine/GLDrawSpheresContactGeometry/GLDrawSpheresContactGeometry.cpp
 2008-09-28 12:37:30 UTC (rev 1530)
+++ 
trunk/pkg/dem/RenderingEngine/GLDrawSpheresContactGeometry/GLDrawSpheresContactGeometry.cpp
 2008-09-29 06:37:41 UTC (rev 1531)
@@ -80,13 +80,8 @@
                Vector3r 
contPt=se31.position+(sc->d1/sc->d0)*(se32.position-se31.position); // must be 
recalculated to not be unscaled if scaling displacements ...
                GLUtils::GLDrawLine(pos1,pos2,Vector3r(.5,.5,.5));
                // sphere center to point on the sphere
-               //GLUtils::GLDrawText("[1]",sc->pos1,Vector3r(1,1,1)); 
GLUtils::GLDrawText("[2]",sc->pos2,Vector3r(1,1,1));
-               
GLUtils::GLDrawLine(pos1,pos1+(sc->ori1*sc->cp1rel*Vector3r::UNIT_X*sc->d1),Vector3r(0,.5,1));
-               
GLUtils::GLDrawLine(pos2,pos2+(sc->ori2*sc->cp2rel*Vector3r::UNIT_X*sc->d2),Vector3r(0,1,.5));
-               //cerr<<"=== 
cp1rel="<<sc->cp1rel[0]<<";"<<sc->cp1rel[1]<<";"<<sc->cp1rel[2]<<";"<<sc->cp1rel[3]<<endl;
-               //cerr<<"=== 
ori1="<<sc->ori1[0]<<";"<<sc->ori1[1]<<";"<<sc->ori1[2]<<";"<<sc->ori1[3]<<endl;
-               //cerr<<"+++ cp1rel="<<sc->cp1rel<<", ori1="<<sc->ori1<<", 
cp1rel*ori1="<<sc->cp1rel*sc->ori1<<endl;
-               //<<", *UNIT_X="<<sc->cp1rel*sc->ori1*Vector3r::UNIT_X<<", 
+pos1="<<sc->pos1+(sc->cp1rel*sc->ori1*Vector3r::UNIT_X)<<endl;
+               
//GLUtils::GLDrawLine(pos1,pos1+(sc->ori1*sc->cp1rel*Vector3r::UNIT_X*sc->d1),Vector3r(0,.5,1));
+               
//GLUtils::GLDrawLine(pos2,pos2+(sc->ori2*sc->cp2rel*Vector3r::UNIT_X*sc->d2),Vector3r(0,1,.5));
                // contact point to projected points
                Vector3r ptTg1=sc->contPtInTgPlane1(), 
ptTg2=sc->contPtInTgPlane2();
                GLUtils::GLDrawLine(contPt,contPt+ptTg1,Vector3r(0,.5,1));
@@ -94,7 +89,7 @@
                // projected shear
                GLUtils::GLDrawLine(contPt+ptTg1,contPt+ptTg2,Vector3r(1,1,1));
                // 
-               GLUtils::GLDrawNum(sc->epsN(),contPt,Vector3r(1,1,1));
+               //GLUtils::GLDrawNum(sc->epsN(),contPt,Vector3r(1,1,1));
        }
 
 


_______________________________________________
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