Author: eudoxos Date: 2009-08-05 20:00:48 +0200 (Wed, 05 Aug 2009) New Revision: 1926
Added: trunk/pkg/dem/PreProcessor/ClumpTestGen.cpp trunk/pkg/dem/PreProcessor/ClumpTestGen.hpp Modified: trunk/core/yade.cpp trunk/lib/import/STLReader.hpp trunk/pkg/dem/DataClass/Clump.cpp trunk/pkg/dem/DataClass/Clump.hpp Log: 1. Fix (?) https://bugs.launchpad.net/yade/+bug/409254 by moving ClumpTestGen out of Clump.hpp 2. Avoid warnings in STL import code (return values _should_ be checked, though!) 3. Avoid warning in yade.cpp in optimized build Modified: trunk/core/yade.cpp =================================================================== --- trunk/core/yade.cpp 2009-08-05 17:18:28 UTC (rev 1925) +++ trunk/core/yade.cpp 2009-08-05 18:00:48 UTC (rev 1926) @@ -62,7 +62,9 @@ void sigHandler(int sig){ - int res; + #ifdef YADE_DEBUG + int res; + #endif switch(sig){ #ifdef YADE_PYTHON case SIGINT: Modified: trunk/lib/import/STLReader.hpp =================================================================== --- trunk/lib/import/STLReader.hpp 2009-08-05 17:18:28 UTC (rev 1925) +++ trunk/lib/import/STLReader.hpp 2009-08-05 18:00:48 UTC (rev 1926) @@ -74,13 +74,14 @@ fseek(fp, 0, SEEK_END); int file_size = ftell(fp); int facenum; + int res; /* Check for binary or ASCII file */ fseek(fp, STL_LABEL_SIZE, SEEK_SET); - fread(&facenum, sizeof(int), 1, fp); + res=fread(&facenum, sizeof(int), 1, fp); int expected_file_size=STL_LABEL_SIZE + 4 + (sizeof(short)+4*sizeof(float) )*facenum ; if(file_size == expected_file_size) binary = true; unsigned char tmpbuf[128]; - fread(tmpbuf,sizeof(tmpbuf),1,fp); + res=fread(tmpbuf,sizeof(tmpbuf),1,fp); for(size_t i = 0; i < sizeof(tmpbuf); i++) { if(tmpbuf[i] > 127) @@ -173,8 +174,9 @@ } int facenum; + int res; fseek(fp, STL_LABEL_SIZE, SEEK_SET); - fread(&facenum, sizeof(int), 1, fp); + res=fread(&facenum, sizeof(int), 1, fp); vector<Vrtx> vcs; set<pair<int,int> > egs; @@ -185,9 +187,9 @@ short attr; float n[3]; Vrtx v[3]; - fread(&n,3*sizeof(float),1,fp); - fread(&v,sizeof(Vrtx),3,fp); - fread(&attr,sizeof(short),1,fp); + res=fread(&n,3*sizeof(float),1,fp); + res=fread(&v,sizeof(Vrtx),3,fp); + res=fread(&attr,sizeof(short),1,fp); //FIXME: Убрать дублирование кода с open_ascii int vid[3]; Modified: trunk/pkg/dem/DataClass/Clump.cpp =================================================================== --- trunk/pkg/dem/DataClass/Clump.cpp 2009-08-05 17:18:28 UTC (rev 1925) +++ trunk/pkg/dem/DataClass/Clump.cpp 2009-08-05 18:00:48 UTC (rev 1926) @@ -2,11 +2,13 @@ #include"Clump.hpp" #include<algorithm> +#include<yade/core/MetaBody.hpp> +#include<yade/core/BodyContainer.hpp> +#include<yade/pkg-common/RigidBodyParameters.hpp> -YADE_PLUGIN((Clump)(ClumpMemberMover)(ClumpTestGen)); +YADE_PLUGIN((Clump)(ClumpMemberMover)); CREATE_LOGGER(Clump); CREATE_LOGGER(ClumpMemberMover); -CREATE_LOGGER(ClumpTestGen); /************************************************************************************** ************************************* ClumpMemberMover ****************************** @@ -326,101 +328,3 @@ -/************************************************************************************** - ********************* ClumpTestGen *************************************************** - **************************************************************************************/ - -#include<yade/core/MetaBody.hpp> -#include<yade/pkg-dem/Shop.hpp> - -bool ClumpTestGen::generate() -{ - //Shop::setDefault("param_pythonRunExpr",string("if S.i%50==0 and S.i<1000 and S.i>500:\n\tprint S.i,len(S.sel),B[1].x, B[1].E")); - - rootBody=Shop::rootBody(); - Shop::rootBodyActors(rootBody); - // clumps do not need to subscribe currently (that will most likely change, though) - rootBody->engines.push_back(shared_ptr<ClumpMemberMover>(new ClumpMemberMover)); - - - shared_ptr<MetaBody> oldRootBody=Omega::instance().getRootBody(); - Omega::instance().setRootBody(rootBody); - - shared_ptr<Body> ground=Shop::box(Vector3r(0,0,-1),Vector3r(3,3,.2)); - ground->isDynamic=false; - // revert random colors for this single case... - ground->geometricalModel->diffuseColor=Vector3r(.6,.6,.6); - ground->interactingGeometry->diffuseColor=Vector3r(.3,.3,.3); - rootBody->bodies->insert(ground); - - vector<Vector3r> relPos; vector<Real> radii; Vector3r clumpPos; - - // standalone (non-clump!) sphere as well - shared_ptr<Body> sphere=Shop::sphere(Vector3r(0,0,0),.5); - rootBody->bodies->insert(sphere); - // one-sphere clump - clumpPos=Vector3r(-2,0,0); - relPos.push_back(Vector3r(0,0,0)); radii.push_back(.5); - createOneClump(rootBody,clumpPos,relPos,radii); - relPos.clear(); radii.clear(); - // two-sphere clump - clumpPos=Vector3r(2,0,0); - relPos.push_back(Vector3r(0,-.5,.5)); radii.push_back(.5); - relPos.push_back(Vector3r(0,.5,0)); radii.push_back(.5); - createOneClump(rootBody,clumpPos,relPos,radii); - relPos.clear(); radii.clear(); - // three-sphere slump - clumpPos=Vector3r(0,2,0); - relPos.push_back(Vector3r(0,-.5,.5)); radii.push_back(.5); - relPos.push_back(Vector3r(0,.5,0)); radii.push_back(.5); - relPos.push_back(Vector3r(.5,0,0)); radii.push_back(.5); - createOneClump(rootBody,clumpPos,relPos,radii); - relPos.clear(); radii.clear(); - // four-sphere slump - clumpPos=Vector3r(0,-2,0); - relPos.push_back(Vector3r(0,0,0)); radii.push_back(.5); - relPos.push_back(Vector3r(.5,0,0)); radii.push_back(.5); - relPos.push_back(Vector3r(0,.5,0)); radii.push_back(.5); - relPos.push_back(Vector3r(0,0,.5)); radii.push_back(.5); - createOneClump(rootBody,clumpPos,relPos,radii); - relPos.clear(); radii.clear(); - - // restore Omega - Omega::instance().setRootBody(oldRootBody); - - message="OK"; - return true; -} - -/*! \brief Generate clump of spheres, the result will be inserted into rootBody. - * - * Attention here: clump's id must be greater than id of any of its constituents; therefore - * 1. create bodies that will be clumped, add them to bodies (at that moment they get their id) and save their ids in clumpMembers - * 2. create (empty) clump and add it to bodies - * 3. add bodies to be clumped to the clump - * 4. call Clump::updateProperties to get physical properties physically right (inertia, position, orientation, mass, ...). - * - * @param clumpPos Center of the clump (not necessarily centroid); serves merely as reference for sphere positions. - * @param relPos Relative positions of individual spheres' centers. - * @param radii Radii of composing spheres. Must have the same length as relPos. - */ -void ClumpTestGen::createOneClump(shared_ptr<MetaBody>& rootBody, Vector3r clumpPos, vector<Vector3r> relPos, vector<Real> radii) -{ - assert(relPos.size()==radii.size()); - list<body_id_t> clumpMembers; - for(size_t i=0; i<relPos.size(); i++){ - shared_ptr<Body> sphere=Shop::sphere(clumpPos+relPos[i],radii[i]); - body_id_t lastId=(body_id_t)rootBody->bodies->insert(sphere); - clumpMembers.push_back(lastId); - LOG_TRACE("Generated (not yet) clumped sphere #"<<lastId); - } - shared_ptr<Clump> clump=shared_ptr<Clump>(new Clump()); - shared_ptr<Body> clumpAsBody=static_pointer_cast<Body>(clump); - clump->isDynamic=true; - rootBody->bodies->insert(clumpAsBody); - FOREACH(body_id_t id, clumpMembers){ - clump->add(id); - } - clump->updateProperties(false); -} - Modified: trunk/pkg/dem/DataClass/Clump.hpp =================================================================== --- trunk/pkg/dem/DataClass/Clump.hpp 2009-08-05 17:18:28 UTC (rev 1925) +++ trunk/pkg/dem/DataClass/Clump.hpp 2009-08-05 18:00:48 UTC (rev 1926) @@ -5,15 +5,9 @@ #include<vector> #include<map> #include<yade/core/Body.hpp> -#include<yade/core/MetaBody.hpp> -#include<yade/core/FileGenerator.hpp> -#include<yade/core/DeusExMachina.hpp> -#include<yade/lib-factory/Factorable.hpp> -#include<yade/pkg-common/PhysicalParametersEngineUnit.hpp> -#include<yade/pkg-common/RigidBodyParameters.hpp> -#include<yade/pkg-common/AABB.hpp> #include<yade/lib-base/Logging.hpp> #include<yade/lib-base/yadeWm3Extra.hpp> +#include<yade/core/DeusExMachina.hpp> /*! Body representing clump (rigid aggregate) composed by other existing bodies. @@ -88,6 +82,7 @@ }; REGISTER_SERIALIZABLE(Clump); + /*! Update ::Clump::members positions so that the Clump behaves as a rigid body. */ class ClumpMemberMover: public DeusExMachina { public: @@ -101,15 +96,3 @@ }; REGISTER_SERIALIZABLE(ClumpMemberMover); -/*! \brief Test some basic clump functionality; show how to use clumps as well. */ -class ClumpTestGen : public FileGenerator { - void createOneClump(shared_ptr<MetaBody>& rootBody, Vector3r clumpPos, vector<Vector3r> relPos, vector<Real> radii); - shared_ptr<ClumpMemberMover> clumpMover; - public : - bool generate(); - DECLARE_LOGGER; - REGISTER_CLASS_AND_BASE(ClumpTestGen,FileGenerator); - REGISTER_ATTRIBUTES(FileGenerator,/*nothing here*/); -}; -REGISTER_SERIALIZABLE(ClumpTestGen); - Added: trunk/pkg/dem/PreProcessor/ClumpTestGen.cpp =================================================================== --- trunk/pkg/dem/PreProcessor/ClumpTestGen.cpp 2009-08-05 17:18:28 UTC (rev 1925) +++ trunk/pkg/dem/PreProcessor/ClumpTestGen.cpp 2009-08-05 18:00:48 UTC (rev 1926) @@ -0,0 +1,107 @@ +// © 2007 Vaclav Smilauer <eudo...@arcig.cz> + +#include"ClumpTestGen.hpp" +#include<yade/pkg-dem/Clump.hpp> +#include<yade/core/MetaBody.hpp> +#include<yade/pkg-dem/Shop.hpp> +#include<yade/core/FileGenerator.hpp> +#include<yade/core/DeusExMachina.hpp> +#include<yade/pkg-common/PhysicalParametersEngineUnit.hpp> +#include<yade/pkg-common/RigidBodyParameters.hpp> +#include<yade/pkg-common/AABB.hpp> + +YADE_PLUGIN((ClumpTestGen)); +CREATE_LOGGER(ClumpTestGen); + +bool ClumpTestGen::generate() +{ + //Shop::setDefault("param_pythonRunExpr",string("if S.i%50==0 and S.i<1000 and S.i>500:\n\tprint S.i,len(S.sel),B[1].x, B[1].E")); + + rootBody=Shop::rootBody(); + Shop::rootBodyActors(rootBody); + // clumps do not need to subscribe currently (that will most likely change, though) + rootBody->engines.push_back(shared_ptr<ClumpMemberMover>(new ClumpMemberMover)); + + + shared_ptr<MetaBody> oldRootBody=Omega::instance().getRootBody(); + Omega::instance().setRootBody(rootBody); + + shared_ptr<Body> ground=Shop::box(Vector3r(0,0,-1),Vector3r(3,3,.2)); + ground->isDynamic=false; + // revert random colors for this single case... + ground->geometricalModel->diffuseColor=Vector3r(.6,.6,.6); + ground->interactingGeometry->diffuseColor=Vector3r(.3,.3,.3); + rootBody->bodies->insert(ground); + + vector<Vector3r> relPos; vector<Real> radii; Vector3r clumpPos; + + // standalone (non-clump!) sphere as well + shared_ptr<Body> sphere=Shop::sphere(Vector3r(0,0,0),.5); + rootBody->bodies->insert(sphere); + // one-sphere clump + clumpPos=Vector3r(-2,0,0); + relPos.push_back(Vector3r(0,0,0)); radii.push_back(.5); + createOneClump(rootBody,clumpPos,relPos,radii); + relPos.clear(); radii.clear(); + // two-sphere clump + clumpPos=Vector3r(2,0,0); + relPos.push_back(Vector3r(0,-.5,.5)); radii.push_back(.5); + relPos.push_back(Vector3r(0,.5,0)); radii.push_back(.5); + createOneClump(rootBody,clumpPos,relPos,radii); + relPos.clear(); radii.clear(); + // three-sphere slump + clumpPos=Vector3r(0,2,0); + relPos.push_back(Vector3r(0,-.5,.5)); radii.push_back(.5); + relPos.push_back(Vector3r(0,.5,0)); radii.push_back(.5); + relPos.push_back(Vector3r(.5,0,0)); radii.push_back(.5); + createOneClump(rootBody,clumpPos,relPos,radii); + relPos.clear(); radii.clear(); + // four-sphere slump + clumpPos=Vector3r(0,-2,0); + relPos.push_back(Vector3r(0,0,0)); radii.push_back(.5); + relPos.push_back(Vector3r(.5,0,0)); radii.push_back(.5); + relPos.push_back(Vector3r(0,.5,0)); radii.push_back(.5); + relPos.push_back(Vector3r(0,0,.5)); radii.push_back(.5); + createOneClump(rootBody,clumpPos,relPos,radii); + relPos.clear(); radii.clear(); + + // restore Omega + Omega::instance().setRootBody(oldRootBody); + + message="OK"; + return true; +} + +/*! \brief Generate clump of spheres, the result will be inserted into rootBody. + * + * Attention here: clump's id must be greater than id of any of its constituents; therefore + * 1. create bodies that will be clumped, add them to bodies (at that moment they get their id) and save their ids in clumpMembers + * 2. create (empty) clump and add it to bodies + * 3. add bodies to be clumped to the clump + * 4. call Clump::updateProperties to get physical properties physically right (inertia, position, orientation, mass, ...). + * + * @param clumpPos Center of the clump (not necessarily centroid); serves merely as reference for sphere positions. + * @param relPos Relative positions of individual spheres' centers. + * @param radii Radii of composing spheres. Must have the same length as relPos. + */ +void ClumpTestGen::createOneClump(shared_ptr<MetaBody>& rootBody, Vector3r clumpPos, vector<Vector3r> relPos, vector<Real> radii) +{ + assert(relPos.size()==radii.size()); + list<body_id_t> clumpMembers; + for(size_t i=0; i<relPos.size(); i++){ + shared_ptr<Body> sphere=Shop::sphere(clumpPos+relPos[i],radii[i]); + body_id_t lastId=(body_id_t)rootBody->bodies->insert(sphere); + clumpMembers.push_back(lastId); + LOG_TRACE("Generated (not yet) clumped sphere #"<<lastId); + } + shared_ptr<Clump> clump=shared_ptr<Clump>(new Clump()); + shared_ptr<Body> clumpAsBody=static_pointer_cast<Body>(clump); + clump->isDynamic=true; + rootBody->bodies->insert(clumpAsBody); + FOREACH(body_id_t id, clumpMembers){ + clump->add(id); + } + clump->updateProperties(false); +} + + Added: trunk/pkg/dem/PreProcessor/ClumpTestGen.hpp =================================================================== --- trunk/pkg/dem/PreProcessor/ClumpTestGen.hpp 2009-08-05 17:18:28 UTC (rev 1925) +++ trunk/pkg/dem/PreProcessor/ClumpTestGen.hpp 2009-08-05 18:00:48 UTC (rev 1926) @@ -0,0 +1,23 @@ +// © 2007 Vaclav Smilauer <eudo...@arcig.cz> + +#pragma once + +#include<yade/core/MetaBody.hpp> +#include<yade/core/FileGenerator.hpp> +#include<yade/core/DeusExMachina.hpp> +#include<yade/pkg-dem/Clump.hpp> + + +/*! \brief Test some basic clump functionality; show how to use clumps as well. */ +class ClumpTestGen : public FileGenerator { + void createOneClump(shared_ptr<MetaBody>& rootBody, Vector3r clumpPos, vector<Vector3r> relPos, vector<Real> radii); + shared_ptr<ClumpMemberMover> clumpMover; + public : + bool generate(); + DECLARE_LOGGER; + REGISTER_CLASS_AND_BASE(ClumpTestGen,FileGenerator); + REGISTER_ATTRIBUTES(FileGenerator,/*nothing here*/); +}; +REGISTER_SERIALIZABLE(ClumpTestGen); + + _______________________________________________ Mailing list: https://launchpad.net/~yade-dev Post to : yade-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-dev More help : https://help.launchpad.net/ListHelp