42 PortableServer::POA_var poa = _default_POA();
43 PortableServer::ObjectId_var
id = poa->servant_to_id(
this);
44 poa->deactivate_object(
id);
50 cout <<
"adding " <<
name <<
" ";
53 string bodyInfoId(
orb->object_to_string(bodyInfo));
56 cout <<
"BodyInfo CORBA ID of " <<
name <<
" is " << bodyInfoId << endl;
63 coldetBody->setName(
name);
70 cout <<
"The model of the name " <<
name;
71 cout <<
" has already been registered. It is replaced." << endl;
75 cout <<
" is ok !" << endl;
81 (
const LinkPair& linkPair)
83 addCollisionPairSub(linkPair, coldetModelPairs);
88 (
const LinkPair& linkPair, vector<ColdetModelPairExPtr>& io_coldetPairs)
90 const char* bodyName[2];
91 bodyName[0] = linkPair.charName1;
92 bodyName[1] = linkPair.charName2;
94 const char* linkName[2];
95 linkName[0] = linkPair.linkName1;
96 linkName[1] = linkPair.linkName2;
98 bool notFound =
false;
102 for(
int i=0;
i < 2; ++
i){
103 StringToColdetBodyMap::iterator it = nameToColdetBodyMap.find(bodyName[
i]);
104 if(it == nameToColdetBodyMap.end()){
105 cout <<
"CollisionDetector::addCollisionPair : Body ";
106 cout << bodyName[
i] <<
" is not found." << endl;
109 coldetBody[
i] = it->second;
110 coldetModel[
i] = coldetBody[
i]->linkColdetModel(linkName[
i]);
112 cout <<
"CollisionDetector::addCollisionPair : Link ";
113 cout << linkName[
i] <<
" is not found." << endl;
120 io_coldetPairs.push_back(
121 new ColdetModelPairEx(coldetBody[0], coldetModel[0], coldetBody[1], coldetModel[1], linkPair.tolerance));
127 (
const CharacterPositionSequence& characterPositions, CollisionSequence_out out_collisions)
129 updateAllLinkPositions(characterPositions);
130 return detectAllCollisions(coldetModelPairs, out_collisions);
135 (
const LinkPairSequence& checkPairs,
136 const CharacterPositionSequence& characterPositions,
137 CollisionSequence_out out_collisions)
139 updateAllLinkPositions(characterPositions);
141 vector<ColdetModelPairExPtr> tmpColdetPairs;
143 for(
unsigned int i=0;
i < checkPairs.length(); ++
i){
144 const LinkPair& linkPair = checkPairs[
i];
145 addCollisionPairSub(linkPair, tmpColdetPairs);
148 return detectAllCollisions(tmpColdetPairs, out_collisions);
153 (
const CharacterPositionSequence& characterPositions)
155 for(
unsigned int i=0;
i < characterPositions.length();
i++){
156 const CharacterPosition& characterPosition = characterPositions[
i];
157 const string bodyName(characterPosition.characterName);
158 StringToColdetBodyMap::iterator it = nameToColdetBodyMap.find(bodyName);
159 if(it != nameToColdetBodyMap.end()){
161 coldetBody->setLinkPositions(characterPosition.linkPositions);
168 (vector<ColdetModelPairExPtr>& coldetPairs, CollisionSequence_out& out_collisions)
170 bool detected =
false;
171 const int numColdetPairs = coldetPairs.size();
172 out_collisions =
new CollisionSequence;
173 out_collisions->length(numColdetPairs);
175 for(
int i=0;
i < numColdetPairs; ++
i){
178 Collision& collision = out_collisions[
i];
180 if(detectCollisionsOfLinkPair(coldetPair, collision.points,
true)){
184 collision.pair.charName1 = CORBA::string_dup(coldetPair.
body0->name());
185 collision.pair.linkName1 = CORBA::string_dup(coldetPair.
model(0)->
name().c_str());
186 collision.pair.charName2 = CORBA::string_dup(coldetPair.
body1->name());
187 collision.pair.linkName2 = CORBA::string_dup(coldetPair.
model(1)->
name().c_str());
195 (
ColdetModelPairEx& coldetPair, CollisionPointSequence& out_collisionPoints,
const bool addCollisionPoints)
197 bool detected =
false;
202 for(
unsigned int i=0;
i < cdata.size();
i++) {
203 for(
int j=0; j < cdata[
i].num_of_i_points; j++){
204 if(cdata[
i].i_point_new[j]){
211 if(addCollisionPoints){
212 out_collisionPoints.length(npoints);
214 for(
unsigned int i=0;
i < cdata.size();
i++) {
218 CollisionPoint& point = out_collisionPoints[index];
219 for(
int k=0; k < 3; k++){
220 point.position[k] = cd.
i_points[j][k];
222 for(
int k=0; k < 3; k++){
225 point.idepth = cd.
depth;
239 CORBA::Boolean checkAll,
240 const CharacterPositionSequence& characterPositions,
241 LinkPairSequence_out out_collidedPairs
244 updateAllLinkPositions(characterPositions);
245 return detectIntersectingLinkPairs(coldetModelPairs, out_collidedPairs, checkAll);
251 CORBA::Boolean checkAll,
252 const LinkPairSequence& checkPairs,
253 const CharacterPositionSequence& characterPositions,
254 LinkPairSequence_out out_collidedPairs
257 updateAllLinkPositions(characterPositions);
259 vector<ColdetModelPairExPtr> tmpColdetPairs;
261 for(
unsigned int i=0;
i < checkPairs.length(); ++
i){
262 const LinkPair& linkPair = checkPairs[
i];
263 addCollisionPairSub(linkPair, tmpColdetPairs);
266 return detectIntersectingLinkPairs(tmpColdetPairs, out_collidedPairs, checkAll);
272 const CharacterPositionSequence& characterPositions,
273 DistanceSequence_out out_distances
276 updateAllLinkPositions(characterPositions);
277 computeDistances(coldetModelPairs, out_distances);
283 const LinkPairSequence& checkPairs,
284 const CharacterPositionSequence& characterPositions,
285 DistanceSequence_out out_distances
288 updateAllLinkPositions(characterPositions);
290 vector<ColdetModelPairExPtr> tmpColdetPairs;
292 for(
unsigned int i=0;
i < checkPairs.length(); ++
i){
293 const LinkPair& linkPair = checkPairs[
i];
294 addCollisionPairSub(linkPair, tmpColdetPairs);
297 computeDistances(tmpColdetPairs, out_distances);
302 const DblArray3 point,
306 CORBA::Double D, minD=0;
307 StringToColdetBodyMap::iterator it = nameToColdetBodyMap.begin();
308 for (; it!=nameToColdetBodyMap.end(); it++){
310 std::cout << it->first << std::endl;
313 for (
unsigned int i=0;
i<body->numLinks();
i++){
314 D = body->linkColdetModel(
i)->computeDistanceWithRay(point, dir);
315 if ((minD==0&&D>0)||(minD>0&&D>0&&minD>D)) minD = D;
317 std::cout <<
"D = " << D << std::endl;
322 std::cout <<
"minD = " << minD << std::endl;
329 DblSequence *distances =
new DblSequence();
330 int scan_half = (
int)(range/2/step);
331 distances->length(scan_half*2+1);
335 for (
int i = -scan_half;
i<= scan_half;
i++){
343 printf(
"angle = %8.3f, distance = %8.3f\n",
a, (*distances)[
i+scan_half]);
351 (vector<ColdetModelPairExPtr>& coldetPairs, LinkPairSequence_out& out_collidedPairs,
const bool checkAll)
353 CollisionPointSequence dummy;
355 bool detected =
false;
357 vector<int> collidedPairIndices;
358 collidedPairIndices.reserve(coldetPairs.size());
360 for(
unsigned int i=0;
i < coldetPairs.size(); ++
i){
361 if(detectCollisionsOfLinkPair(*coldetPairs[
i], dummy,
false)){
363 collidedPairIndices.push_back(
i);
370 out_collidedPairs =
new LinkPairSequence();
371 out_collidedPairs->length(collidedPairIndices.size());
373 for(CORBA::ULong
i=0;
i < collidedPairIndices.size(); ++
i){
374 int pairIndex = collidedPairIndices[
i];
376 LinkPair& linkPair = out_collidedPairs[
i];
377 linkPair.charName1 = CORBA::string_dup(coldetPair.
body0->name());
378 linkPair.linkName1 = CORBA::string_dup(coldetPair.
model(0)->
name().c_str());
379 linkPair.charName2 = CORBA::string_dup(coldetPair.
body1->name());
380 linkPair.linkName2 = CORBA::string_dup(coldetPair.
model(1)->
name().c_str());
387 (vector<ColdetModelPairExPtr>& coldetPairs, LinkPairSequence_out& out_collidedPairs,
const bool checkAll)
389 bool detected =
false;
391 vector<int> collidedPairIndices;
392 collidedPairIndices.reserve(coldetPairs.size());
394 for(
unsigned int i=0;
i < coldetPairs.size(); ++
i){
395 if(coldetPairs[
i]->detectIntersection()){
397 collidedPairIndices.push_back(
i);
404 out_collidedPairs =
new LinkPairSequence();
405 out_collidedPairs->length(collidedPairIndices.size());
407 for(CORBA::ULong
i=0;
i < collidedPairIndices.size(); ++
i){
408 int pairIndex = collidedPairIndices[
i];
410 LinkPair& linkPair = out_collidedPairs[
i];
411 linkPair.charName1 = CORBA::string_dup(coldetPair.
body0->name());
412 linkPair.linkName1 = CORBA::string_dup(coldetPair.
model(0)->
name().c_str());
413 linkPair.charName2 = CORBA::string_dup(coldetPair.
body1->name());
414 linkPair.linkName2 = CORBA::string_dup(coldetPair.
model(1)->
name().c_str());
421 (vector<ColdetModelPairExPtr>& coldetPairs, DistanceSequence_out& out_distances)
423 out_distances =
new DistanceSequence();
424 out_distances->length(coldetPairs.size());
426 for(
unsigned int i=0;
i < coldetPairs.size(); ++
i){
428 Distance& dinfo = out_distances[
i];
430 LinkPair& linkPair = dinfo.pair;
431 linkPair.charName1 = CORBA::string_dup(coldetPair.
body0->name());
432 linkPair.linkName1 = CORBA::string_dup(coldetPair.
model(0)->
name().c_str());
433 linkPair.charName2 = CORBA::string_dup(coldetPair.
body1->name());
434 linkPair.linkName2 = CORBA::string_dup(coldetPair.
model(1)->
name().c_str());
448 PortableServer::POA_var poa = _default_POA();
449 PortableServer::ObjectId_var
id = poa->servant_to_id(
this);
450 poa->deactivate_object(
id);
457 PortableServer::ServantBase_var collisionDetectorrServant = collisionDetector;
458 PortableServer::POA_var poa = _default_POA();
459 PortableServer::ObjectId_var
id = poa->activate_object(collisionDetector);
460 return collisionDetector->_this();
466 orb->shutdown(
false);