示例#1
0
void Viewer::cb_Save()
{
	std::string filters("all (*.*);; map (*.map);; off (*.off);; ply (*.ply)") ;
	std::string filename = selectFileSave("Save Mesh", "", filters) ;

	exportMesh(filename) ;
}
bool RigidMeshExporter::exportTo(std::ostream& output,
								 bool compressePos,
								 bool compressNormal,
								 bool compressTexcoord,
								 bool compressWeight) const
{
	//MESH
	//ATCH
	size_t fileChunkSize;
	if (!exportMesh(output, &fileChunkSize, compressePos, compressNormal, compressTexcoord))
	{
		return false;
	}
	size_t nameChunkSize;
	if (!m_attachedBoneName.empty())
	{
		if (!writeStringChunk(output, m_attachedBoneName, nameChunkSize, 'ATCH'))
		{
			return false;
		}
		fileChunkSize += (nameChunkSize + CHUNK_HEADER_SIZE);
		if (!updateChunkSize(output, fileChunkSize))
		{
			return false;
		}
	}
	return true;
}
示例#3
0
MainWindow::MainWindow(tdv::TDVContext *ctx)
{
    m_ctx = ctx;
    m_reconst = NULL;

    m_camsDialog = NULL;
    m_rectDialog = NULL;
    m_dispDialog = NULL;
    
    setupUi(this);
    connect(pbCamerasView, SIGNAL(clicked()),
            this, SLOT(showCamerasViews()));
    connect(pbReconstFrame, SIGNAL(clicked()),
            this, SLOT(stepReconstruction()));
    connect(pbReconstStream, SIGNAL(clicked()),
            this, SLOT(playReconstruction()));
    connect(pbDisparityMap, SIGNAL(clicked()),
            this, SLOT(showDisparity()));
    connect(pbRectification, SIGNAL(clicked()),
            this, SLOT(showRectification()));        
    
    pbExport->setEnabled(true);
    pbRectification->setEnabled(false);
    pbDisparityMap->setEnabled(false);
    
    m_reprView = new ReprojectionView(this);
    layReproj->addWidget(m_reprView, 0, 0);

    connect(pbExport, SIGNAL(clicked()),
            m_reprView, SLOT(exportMesh()));

}
示例#4
0
文件: link.cpp 项目: PerryZh/idyntree
bool exportGeometry(GeometryPtr &geom, TiXmlElement *xml)
{
  TiXmlElement *geometry_xml = new TiXmlElement("geometry");
  if( geom->type == Geometry::SPHERE )
  {
    exportSphere(*((Sphere*)toPlainGeometryPtr(geom)), geometry_xml);
  }
  else if ( geom->type == Geometry::BOX )
  {
    exportBox(*((Box*)toPlainGeometryPtr(geom)), geometry_xml);
  }
  else if (geom->type == Geometry::CYLINDER)
  {
    exportCylinder(*((Cylinder*)toPlainGeometryPtr(geom)), geometry_xml);
  }
  else if (geom->type == Geometry::MESH)
  {
    exportMesh(*((Mesh*)toPlainGeometryPtr(geom)), geometry_xml);
  }
  else
  {
    logError("geometry not specified, I'll make one up for you!");
    Sphere *s = new Sphere();
    s->radius = 0.03;
    resetPtr(geom,s);
    exportSphere(*s, geometry_xml);
  }

  xml->LinkEndChild(geometry_xml);
  return true;
}
示例#5
0
bool exportGeometry(GeometrySharedPtr &geom, TiXmlElement *xml)
{
  TiXmlElement *geometry_xml = new TiXmlElement("geometry");
  if (urdf::dynamic_pointer_cast<Sphere>(geom))
  {
    exportSphere((*(urdf::dynamic_pointer_cast<Sphere>(geom).get())), geometry_xml);
  }
  else if (urdf::dynamic_pointer_cast<Box>(geom))
  {
    exportBox((*(urdf::dynamic_pointer_cast<Box>(geom).get())), geometry_xml);
  }
  else if (urdf::dynamic_pointer_cast<Cylinder>(geom))
  {
    exportCylinder((*(urdf::dynamic_pointer_cast<Cylinder>(geom).get())), geometry_xml);
  }
  else if (urdf::dynamic_pointer_cast<Mesh>(geom))
  {
    exportMesh((*(urdf::dynamic_pointer_cast<Mesh>(geom).get())), geometry_xml);
  }
  else
  {
    CONSOLE_BRIDGE_logError("geometry not specified, I'll make one up for you!");
    Sphere *s = new Sphere();
    s->radius = 0.03;
    geom.reset(s);
    exportSphere((*(urdf::dynamic_pointer_cast<Sphere>(geom).get())), geometry_xml);
  }

  xml->LinkEndChild(geometry_xml);
  return true;
}
    void StatefulMeshSerializer::saveMesh(const Ogre::String& name, bool keepEndianess)
    {
        if (mMesh.isNull())
        {
            throw std::logic_error("No mesh to save set.");
        }

        Endian endianMode = keepEndianess ? mMeshFileEndian : ENDIAN_NATIVE;
        exportMesh(mMesh.getPointer(), name, endianMode);
    }
示例#7
0
    //---------------------------------------------------------------------
    void MeshSerializer::exportMesh(const Mesh* pMesh, const String& filename,
        Endian endianMode)
    {
        std::fstream *f = OGRE_NEW_T(std::fstream, MEMCATEGORY_GENERAL)();
        f->open(filename.c_str(), std::ios::binary | std::ios::out);
        DataStreamPtr stream(OGRE_NEW FileStreamDataStream(f));

        exportMesh(pMesh, stream, endianMode);

        stream->close();
    }
示例#8
0
    //---------------------------------------------------------------------
    void MeshSerializer::exportMesh(const Mesh* pMesh, const String& filename,
                                    MeshVersion version, Endian endianMode)
    {
        if( version == MESH_VERSION_LEGACY )
        {
            OGRE_EXCEPT( Exception::ERR_INVALIDPARAMS,
                         "You may not supply a legacy version number for writing meshes.",
                         "MeshSerializer::exportMesh" );
        }

        std::fstream *f = OGRE_NEW_T(std::fstream, MEMCATEGORY_GENERAL)();
        f->open(filename.c_str(), std::ios::binary | std::ios::out);
        DataStreamPtr stream(OGRE_NEW FileStreamDataStream(f));
        
        exportMesh(pMesh, stream, version, endianMode);
        
        stream->close();
    }
示例#9
0
 //---------------------------------------------------------------------
 void MeshSerializer::exportMesh(const Mesh* pMesh, DataStreamPtr stream,
     Endian endianMode)
 {
     exportMesh(pMesh, stream, MESH_VERSION_LATEST, endianMode);
 }
int main()
{
	rcAllocSetCustom(allocCustom<rcAllocHint>, freeCustom);
	dtAllocSetCustom(allocCustom<dtAllocHint>, freeCustom);

	BuildContext ctx;
	InputGeom geom;

	geom.load(&ctx, "./geomset.txt");

	ArMeshDataBuilder builder(&ctx, &geom, meshProcess);

	builder.setAgentMaxClimb(1.8f);

	ArMeshDataPtr data = builder.build();

	if (!data)
	{
		ctx.log(RC_LOG_ERROR, "Build ArMeshData failed.");
		return -1;
	}

	ctx.log(RC_LOG_PROGRESS, "Total build time: %d ms", ctx.getAccumulatedTime(RC_TIMER_TOTAL));

	if (!save(&ctx, data))
	{
		return -1;
	}

	FILE* in = fopen("./all_tiles_navmesh.bin", "rb");

	if (!in)
	{
		ctx.log(RC_LOG_ERROR, "Open all_tiles_navmesh.bin failed.");
		return -1;
	}

	ArMeshDataFileReader reader(in);

	if (!reader.serialize(*data))
	{
		ctx.log(RC_LOG_ERROR, "Read ArMeshData failed.");
		fclose(in);
		return -1;
	}

	fclose(in);

	ArMesh mesh;
	ArMeshImporter importer(mesh);

	if (!importer.serialize(*data))
	{
		ctx.log(RC_LOG_ERROR, "Import ArMeshData failed.");
		return -1;
	}
	
	ArQuery query;

	if (dtStatusFailed(query.init(&mesh, 2048)))
	{
		ctx.log(RC_LOG_ERROR, "Init ArQuery failed.");
		return -1;
	}

	float sp[3];
	
	printf("start: ");
	scanf("%f%f%f", sp, sp + 1, sp + 2);

	float ep[3];

	printf("end:   ");
	scanf("%f%f%f", ep, ep + 1, ep + 2);

	float ext[3] = {2, 4, 2};
	dtQueryFilter filter;

	filter.setAreaCost(SAMPLE_POLYAREA_GROUND, 1.0f);
	filter.setAreaCost(SAMPLE_POLYAREA_WATER, 10.0f);
	filter.setAreaCost(SAMPLE_POLYAREA_ROAD, 1.0f);
	filter.setAreaCost(SAMPLE_POLYAREA_DOOR, 1.0f);
	filter.setAreaCost(SAMPLE_POLYAREA_GRASS, 2.0f);
	filter.setAreaCost(SAMPLE_POLYAREA_JUMP, 1.5f);

	dtPolyRef sr;

	query.backend()->findNearestPoly(sp, ext, &filter, &sr, 0);

	dtPolyRef er;

	query.backend()->findNearestPoly(ep, ext, &filter, &er, 0);

	dtPolyRef polys[256];
	int npolys;

	query.backend()->findPath(sr, er, sp, ep, &filter, polys, &npolys, 256);

	float path[256 * 3];
	dtPolyRef pathPolys[256];
	unsigned char pathFlags[256];
	int pathLen;

	query.backend()->findStraightPath(sp, ep, polys, npolys, path, pathFlags, pathPolys, &pathLen, 256, 0);

	printf("path:\n%d\n", pathLen);

	for (int i = 0; i < pathLen; ++i)
	{
		printf("%f %f %f\n", path[i * 3], path[i * 3 + 1], path[i * 3 + 2]);
	}

	if (!exportMesh(&ctx, mesh))
	{
		return -1;
	}

	return 0;
}