1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/*************************************************************************
* Copyright (C) 2004 by Olivier Galizzi *
* olivier.galizzi@imag.fr *
* *
* 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 "Bo1_Box_Aabb.hpp"
#include<yade/pkg/common/Box.hpp>
#include<yade/pkg/common/Aabb.hpp>
void Bo1_Box_Aabb::go( const shared_ptr<Shape>& cm,
shared_ptr<Bound>& bv,
const Se3r& se3,
const Body* b)
{
Box* box = static_cast<Box*>(cm.get());
if(!bv){ bv=shared_ptr<Bound>(new Aabb); }
Aabb* aabb=static_cast<Aabb*>(bv.get());
if(scene->isPeriodic && scene->cell->hasShear()) throw logic_error(__FILE__ "Boxes not (yet?) supported in sheared cell.");
Matrix3r r=se3.orientation.toRotationMatrix();
Vector3r halfSize(Vector3r::Zero());
for( int i=0; i<3; ++i )
for( int j=0; j<3; ++j )
halfSize[i] += fabs( r(i,j) * box->extents[j] );
aabb->min = se3.position-halfSize;
aabb->max = se3.position+halfSize;
}
YADE_PLUGIN((Bo1_Box_Aabb));
|