After a bit more investigation the problem I see it that it is assumed 
everywhere that aabb's are tuples, and they are used for constructive solid 
geometry.
If predicate.aabb() is a tuple then aabbExtrema() must be a tuple as well, else 
the interface is heterogeneous and the extrema are incompatible with everything 
else (although it can still work in lucky cases because of intersections in the 
interfaces of tuples and lists).
Aabb type would then have to be changed in many places if we were changing it, 
and this is not limited to _packPredicates.cpp. See for instance 
cloudBestFitOBB() in _packObb.cpp. I still didn't spot all of them.

Although it was theoretically a good move to switch from tuple to
wrapped vector<double>, it doesn't seem so wise now given the number of
changes it implies.

Considering your very initial need which was IIRC to get the aabb of
spheres I would suggest to either extract the values from the tuple, or
to declare an additional function with same code as in 1db13fb11 (it
could then be re-used inside aabbExtrema() to avoid duplication).

        Real inf=std::numeric_limits<Real>::infinity();
        Vector3r minimum(inf,inf,inf),maximum(-inf,-inf,-inf);
        FOREACH(const shared_ptr<Body>& b, 
*Omega::instance().getScene()->bodies){
                if(!b) continue;
                shared_ptr<Sphere> s=YADE_PTR_DYN_CAST<Sphere>(b->shape); 
if(!s) continue;
                Vector3r rrr(s->radius,s->radius,s->radius);
                
minimum=minimum.cwiseMin(b->state->pos-(centers?Vector3r::Zero():rrr));
                
maximum=maximum.cwiseMax(b->state->pos+(centers?Vector3r::Zero():rrr));
        }
        Vector3r dim=maximum-minimum;
        vector<Vector3r> ret;
        ret.push_back(minimum+.5*cutoff*dim);
        ret.push_back(maximum-.5*cutoff*dim);

Cheers

Bruno

-- 
You received this bug notification because you are a member of Yade
developers, which is subscribed to Yade.
https://bugs.launchpad.net/bugs/1804621

Title:
  bodyNumInteractionsHistogram broken

Status in Yade:
  Fix Released

Bug description:
  See https://answers.launchpad.net/yade/+question/676284 and:

  #####################
  O.bodies.append(sphere((0,0,0),1,dynamic=False))
  O.bodies.append(sphere((0,0,1.9),1,dynamic=False))

  O.step()

  print 'BodyNumInteractions Histogram', 
bodyNumInteractionsHistogram(aabbExtrema())
  ####################

  which returns (with trunk version) :

  ArgumentError: Python argument types in
      yade._utils.bodyNumInteractionsHistogram(list)
  did not match C++ signature:
      bodyNumInteractionsHistogram(boost::python::tuple aabb, bool 
contactOnly=False)

  
  because my commit [*] changed the Python return type of aabbExtrema() from 
tuple to list.

  
  Possible (and easiest) fix would be to change all corresponding py::tuple 
aabb from py::list aabb. Agree ? 

  Or do we want this function to deal with Python tuples and not lists
  ?..


  Jérôme

  [*]
  https://github.com/yade/trunk/commit/1db13fb1183b9e294dc9761da76cfa4fc2791cc1

To manage notifications about this bug go to:
https://bugs.launchpad.net/yade/+bug/1804621/+subscriptions

_______________________________________________
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

Reply via email to