void MeshExporter::handleEvent(sofa::core::objectmodel::Event *event) { if (sofa::core::objectmodel::KeypressedEvent* ev = dynamic_cast<sofa::core::objectmodel::KeypressedEvent*>(event)) { //std::cout << "key pressed " << std::endl; switch(ev->getKey()) { case 'E': case 'e': writeMesh(); break; } } else if ( /*simulation::AnimateEndEvent* ev =*/ dynamic_cast<simulation::AnimateEndEvent*>(event)) { unsigned int maxStep = exportEveryNbSteps.getValue(); if (maxStep == 0) return; stepCounter++; if(stepCounter >= maxStep) { stepCounter = 0; writeMesh(); } } }
MStatus HesperisCmd::writeSelectedCurve(const MSelectionList & selList) { MItSelectionList iter( selList ); MDagPathArray curves; MDagPathArray tms; for(; !iter.isDone(); iter.next()) { MDagPath apath; iter.getDagPath( apath ); tms.append(apath); ASearchHelper::LsAllTypedPaths(curves, apath, MFn::kNurbsCurve); } if(curves.length() < 1) { MGlobal::displayInfo(" zero curve selction!"); return MS::kSuccess; } HesperisFile hesf; bool fstat = hesf.create(m_fileName.asChar()); if(!fstat) { MGlobal::displayWarning(MString(" cannot create file ")+ m_fileName); return MS::kSuccess; } HesperisIO::WriteTransforms(tms, &hesf); HesperisCurveIO::WriteCurves(curves, &hesf); writeMesh(&hesf); MGlobal::displayInfo(" done."); return MS::kSuccess; }
void D3MFExporter::writeObjects() { if ( nullptr == mScene->mRootNode ) { return; } aiNode *root = mScene->mRootNode; for ( unsigned int i = 0; i < root->mNumChildren; ++i ) { aiNode *currentNode( root->mChildren[ i ] ); if ( nullptr == currentNode ) { continue; } mModelOutput << "<" << XmlTag::object << " id=\"" << currentNode->mName.C_Str() << "\" type=\"model\">"; mModelOutput << std::endl; for ( unsigned int j = 0; j < currentNode->mNumMeshes; ++j ) { aiMesh *currentMesh = mScene->mMeshes[ currentNode->mMeshes[ j ] ]; if ( nullptr == currentMesh ) { continue; } writeMesh( currentMesh ); } mBuildItems.push_back( i ); mModelOutput << "</" << XmlTag::object << ">"; mModelOutput << std::endl; } }
RETURN_VALUE MOFMesh::save(const char* filename) { FILE* output; fopen_s(&output,filename,"wb"); if(!output) return RETURN_ERROR; MOF_HEADER header; header.id = MOF_FILE_ID; header.version = MOF_CURRENT_VERSION; header.numMeshes = this->m_numMeshes; //printf("\nMOF Before header\n"); fwrite(&header,sizeof(MOF_HEADER),1,output); //printf("\nMOF after\n"); RETURN_VALUE result = RETURN_OK; for(int i=0; i<this->m_numMeshes; ++i) { result = writeMesh(output, i); if(result != RETURN_OK) return result; } fclose(output); return RETURN_OK; }
int main(int argc, char **argv) { Mesh *mesh = NULL; double m, m1, m2; double s, s1, s2; double t1, t2; struct rusage r0, r1, r2; if (argc < 3) { fprintf(stderr, "Usage: %s <input_mesh> <output_mesh>\n", argv[0]); return -1; } getrusage(RUSAGE_SELF, &r0); if (readMesh(argv[1], &mesh)) { freeMesh(&mesh); return -1; } getrusage(RUSAGE_SELF, &r1); m1 = (double) r1.ru_utime.tv_usec; m2 = (double) r0.ru_utime.tv_usec; m = m1 - m2; s1 = (double) r1.ru_utime.tv_sec; s2 = (double) r0.ru_utime.tv_sec; s = s1 - s2; t1 = s + m / MICROSEC; m1 = (double) r1.ru_stime.tv_usec; m2 = (double) r0.ru_stime.tv_usec; m = m1 - m2; s1 = (double) r1.ru_stime.tv_sec; s2 = (double) r0.ru_stime.tv_sec; s = s1 - s2; t2 = s + m / MICROSEC; printf("Read: %5.4e System: %5.4e Total: %5.4e\n", t1, t2, t1+t2); getrusage(RUSAGE_SELF, &r1); optMesh(mesh, 1.0e-6, 2); getrusage(RUSAGE_SELF, &r2); m1 = (double) r2.ru_utime.tv_usec; m2 = (double) r1.ru_utime.tv_usec; m = m1 - m2; s1 = (double) r2.ru_utime.tv_sec; s2 = (double) r1.ru_utime.tv_sec; s = s1 - s2; t1 = s + m / MICROSEC; m1 = (double) r2.ru_stime.tv_usec; m2 = (double) r1.ru_stime.tv_usec; m = m1 - m2; s1 = (double) r2.ru_stime.tv_sec; s2 = (double) r1.ru_stime.tv_sec; s = s1 - s2; t2 = s + m / MICROSEC; printf("Optimize: User: %5.4e System: %5.4e Total: %5.4e\n", t1, t2, t1+t2); getrusage(RUSAGE_SELF, &r1); writeMesh(argv[2], mesh); getrusage(RUSAGE_SELF, &r2); m1 = (double) r2.ru_utime.tv_usec; m2 = (double) r1.ru_utime.tv_usec; m = m1 - m2; s1 = (double) r2.ru_utime.tv_sec; s2 = (double) r1.ru_utime.tv_sec; s = s1 - s2; t1 = s + m / MICROSEC; m1 = (double) r2.ru_stime.tv_usec; m2 = (double) r1.ru_stime.tv_usec; m = m1 - m2; s1 = (double) r2.ru_stime.tv_sec; s2 = (double) r1.ru_stime.tv_sec; s = s1 - s2; t2 = s + m / MICROSEC; printf("Write: User: %5.4e System: %5.4e Total: %5.4e\n", t1, t2, t1+t2); freeMesh(&mesh); getrusage(RUSAGE_SELF, &r2); m1 = (double) r2.ru_utime.tv_usec; m2 = (double) r0.ru_utime.tv_usec; m = m1 - m2; s1 = (double) r2.ru_utime.tv_sec; s2 = (double) r0.ru_utime.tv_sec; s = s1 - s2; t1 = s + m / MICROSEC; m1 = (double) r2.ru_stime.tv_usec; m2 = (double) r0.ru_stime.tv_usec; m = m1 - m2; s1 = (double) r2.ru_stime.tv_sec; s2 = (double) r0.ru_stime.tv_sec; s = s1 - s2; t2 = s + m / MICROSEC; printf("Total: User: %5.4e System: %5.4e Total: %5.4e\n", t1, t2, t1+t2); return 0; }
MStatus vxCache::doIt( const MArgList& args ) { MStatus status = parseArgs( args ); if( status != MS::kSuccess ) return status; MArgDatabase argData(syntax(), args); MAnimControl timeControl; MTime time = timeControl.currentTime(); int frame =int(time.value()); MString proj; MGlobal::executeCommand( MString ("string $p = `workspace -q -fn`"), proj ); MSelectionList selList; MGlobal::getActiveSelectionList ( selList ); MItSelectionList iter( selList ); MString cache_path = proj + "/data/"; MString cache_name; MString scene_name = "untitled"; worldSpace = false; if (argData.isFlagSet("-p")) argData.getFlagArgument("-p", 0, cache_path); if (argData.isFlagSet("-n")) argData.getFlagArgument("-n", 0, cache_name); if (argData.isFlagSet("-w")) argData.getFlagArgument("-w", 0, worldSpace); for ( ; !iter.isDone(); iter.next() ) { MDagPath meshPath; iter.getDagPath( meshPath ); meshPath.extendToShape(); MObject meshObj = meshPath.node(); MString surface = meshPath.partialPathName(); zWorks::validateFilePath(surface); char filename[512]; cache_name = surface; if(argData.isFlagSet("-sg")) sprintf( filename, "%s/%s.mcf", cache_path.asChar(), cache_name.asChar() ); else sprintf( filename, "%s/%s.%d.mcf", cache_path.asChar(), cache_name.asChar(), frame ); MDagPath surfDag; if ( meshPath.hasFn(MFn::kMesh)) { writeMesh(filename, meshPath, meshObj); MGlobal::displayInfo ( MString("vxCache writes ") + filename); } else MGlobal::displayError ( surface + "- Cannot find mesh to write!" ); } if ( selList.length() == 0 ) { MGlobal:: displayError ( "Nothing is selected!" ); return MS::kSuccess; } return MS::kSuccess; }
// Billboards also go through this code. The Geode is passed // to writeFace and writeMesh. If those methods successfully cast // the Geode to a Billboard, then they set the template mode // bit accordingly. void FltExportVisitor::apply( osg::Geode& node ) { _firstNode = false; ScopedStatePushPop guard( this, node.getStateSet() ); unsigned int idx; for (idx=0; idx<node.getNumDrawables(); idx++) { osg::Geometry* geom = node.getDrawable( idx )->asGeometry(); if (!geom) { std::string warning( "fltexp: Non-Geometry Drawable encountered. Ignoring." ); osg::notify( osg::WARN ) << warning << std::endl; _fltOpt->getWriteResult().warn( warning ); continue; } ScopedStatePushPop drawableGuard( this, geom->getStateSet() ); // Push and pop subfaces if polygon offset is on. SubfaceHelper subface( *this, getCurrentStateSet() ); if (atLeastOneFace( *geom )) { // If at least one record will be a Face record, then we // need to write to the vertex palette. _vertexPalette->add( *geom ); // Iterate over all PrimitiveSets and output Face records. unsigned int jdx; for (jdx=0; jdx < geom->getNumPrimitiveSets(); jdx++) { osg::PrimitiveSet* prim = geom->getPrimitiveSet( jdx ); if ( isMesh( prim->getMode() ) ) continue; if (prim->getType() == osg::PrimitiveSet::DrawArraysPrimitiveType) handleDrawArrays( dynamic_cast<osg::DrawArrays*>( prim ), *geom, node ); else if (prim->getType() == osg::PrimitiveSet::DrawArrayLengthsPrimitiveType) handleDrawArrayLengths( dynamic_cast<osg::DrawArrayLengths*>( prim ), *geom, node ); else if ( (prim->getType() == osg::PrimitiveSet::DrawElementsUBytePrimitiveType) || (prim->getType() == osg::PrimitiveSet::DrawElementsUShortPrimitiveType) || (prim->getType() == osg::PrimitiveSet::DrawElementsUIntPrimitiveType) ) handleDrawElements( dynamic_cast<osg::DrawElements*>( prim ), *geom, node ); else { std::string warning( "fltexp: Unknown PrimitiveSet type." ); osg::notify( osg::WARN ) << warning << std::endl; _fltOpt->getWriteResult().warn( warning ); return; } } } if (atLeastOneMesh( *geom )) { // If at least one Mesh record, write out preamble mesh records // followed by a Mesh Primitive record per PrimitiveSet. writeMesh( node, *geom ); writeMatrix( node.getUserData() ); writeComment( node ); writeMultitexture( *geom ); writeLocalVertexPool( *geom ); writePush(); unsigned int jdx; for (jdx=0; jdx < geom->getNumPrimitiveSets(); jdx++) { osg::PrimitiveSet* prim = geom->getPrimitiveSet( jdx ); if ( !isMesh( prim->getMode() ) ) continue; if (prim->getType() == osg::PrimitiveSet::DrawArraysPrimitiveType) handleDrawArrays( dynamic_cast<osg::DrawArrays*>( prim ), *geom, node ); else if (prim->getType() == osg::PrimitiveSet::DrawArrayLengthsPrimitiveType) handleDrawArrayLengths( dynamic_cast<osg::DrawArrayLengths*>( prim ), *geom, node ); else if ( (prim->getType() == osg::PrimitiveSet::DrawElementsUBytePrimitiveType) || (prim->getType() == osg::PrimitiveSet::DrawElementsUShortPrimitiveType) || (prim->getType() == osg::PrimitiveSet::DrawElementsUIntPrimitiveType) ) handleDrawElements( dynamic_cast<osg::DrawElements*>( prim ), *geom, node ); else { std::string warning( "fltexp: Unknown PrimitiveSet type." ); osg::notify( osg::WARN ) << warning << std::endl; _fltOpt->getWriteResult().warn( warning ); return; } } writePop(); } } // Would traverse here if this node could have children. // traverse( (osg::Node&)node ); }
void MeshExporter::bwdInit() { if (exportAtBegin.getValue()) writeMesh(); }
void MeshExporter::cleanup() { if (exportAtEnd.getValue()) writeMesh(); }
void RegistrationExporter::bwdInit() { if (exportAtBegin.getValue()) writeMesh(); }
void RegistrationExporter::cleanup() { if (exportAtEnd.getValue()) writeMesh(); }