/** * ファイルの拡張子(ドットを含む)を返します。 */ PathString getFileExtension(const PathString &s) { const PathString filename = getLastFileName(s); if(filename.empty() || filename == AUSH_NATIVE_L(".") || filename == AUSH_NATIVE_L("..")){ return PathString(); } const std::size_t pos = find_last_char(filename, is_dot()); if(pos >= filename.size()){ return PathString(); } return filename.substr(pos); }
bool ColladaConverter::saveAs(const char* filename) { (void) filename; if (m_collada) { for (int i=0;i<m_numObjects;i++) { btAssert(m_colladadomNodes[i]); if (!m_colladadomNodes[i]->getTranslate_array().getCount()) { domTranslate* transl = (domTranslate*) m_colladadomNodes[i]->createAndPlace("translate"); transl->getValue().append(0.); transl->getValue().append(0.); transl->getValue().append(0.); } while (m_colladadomNodes[i]->getTranslate_array().getCount() > 1) { m_colladadomNodes[i]->removeFromParent(m_colladadomNodes[i]->getTranslate_array().get(1)); //m_colladadomNodes[i]->getTranslate_array().removeIndex(1); } { btVector3 np = m_rigidBodies[i]->getWorldTransform().getOrigin(); domFloat3 newPos = m_colladadomNodes[i]->getTranslate_array().get(0)->getValue(); newPos.set(0,np[0]); newPos.set(1,np[1]); newPos.set(2,np[2]); m_colladadomNodes[i]->getTranslate_array().get(0)->setValue(newPos); } if (!m_colladadomNodes[i]->getRotate_array().getCount()) { domRotate* rot = (domRotate*)m_colladadomNodes[i]->createAndPlace("rotate"); rot->getValue().append(1.0); rot->getValue().append(0.0); rot->getValue().append(0.0); rot->getValue().append(0.0); } while (m_colladadomNodes[i]->getRotate_array().getCount()>1) { m_colladadomNodes[i]->removeFromParent(m_colladadomNodes[i]->getRotate_array().get(1)); //m_colladadomNodes[i]->getRotate_array().removeIndex(1); } { btQuaternion quat = m_rigidBodies[i]->getCenterOfMassTransform().getRotation(); btVector3 axis(quat.getX(),quat.getY(),quat.getZ()); axis[3] = 0.f; //check for axis length btScalar len = axis.length2(); if (len < SIMD_EPSILON*SIMD_EPSILON) axis = btVector3(1.f,0.f,0.f); else axis /= btSqrt(len); m_colladadomNodes[i]->getRotate_array().get(0)->getValue().set(0,axis[0]); m_colladadomNodes[i]->getRotate_array().get(0)->getValue().set(1,axis[1]); m_colladadomNodes[i]->getRotate_array().get(0)->getValue().set(2,axis[2]); m_colladadomNodes[i]->getRotate_array().get(0)->getValue().set(3,quat.getAngle()*SIMD_DEGS_PER_RAD); } while (m_colladadomNodes[i]->getMatrix_array().getCount()) { m_colladadomNodes[i]->removeFromParent(m_colladadomNodes[i]->getMatrix_array().get(0)); //m_colladadomNodes[i]->getMatrix_array().removeIndex(0); } } char saveName[550]; static int saveCount=1; sprintf(saveName,"%s%i",getLastFileName(),saveCount++); char* name = &saveName[0]; if (name[0] == '/') { name = &saveName[1]; } if (m_dom->getAsset()->getContributor_array().getCount()) { if (!m_dom->getAsset()->getContributor_array().get(0)->getAuthor()) { m_dom->getAsset()->getContributor_array().get(0)->createAndPlace("author"); } m_dom->getAsset()->getContributor_array().get(0)->getAuthor()->setValue ("http://bullet.sf.net Erwin Coumans"); if (!m_dom->getAsset()->getContributor_array().get(0)->getAuthoring_tool()) { m_dom->getAsset()->getContributor_array().get(0)->createAndPlace("authoring_tool"); } m_dom->getAsset()->getContributor_array().get(0)->getAuthoring_tool()->setValue #ifdef WIN32 ("Bullet ColladaPhysicsViewer-Win32-0.8"); #else #ifdef __APPLE__ ("Bullet ColladaPhysicsViewer-MacOSX-0.8"); #else ("Bullet ColladaPhysicsViewer-UnknownPlatform-0.8"); #endif #endif if (!m_dom->getAsset()->getContributor_array().get(0)->getComments()) { m_dom->getAsset()->getContributor_array().get(0)->createAndPlace("comments"); } m_dom->getAsset()->getContributor_array().get(0)->getComments()->setValue ("Comments to Physics Forum at http://www.continuousphysics.com/Bullet/phpBB2/index.php"); } m_collada->saveAs(name); return true; } return false; }