コード例 #1
0
std::list<MeshData> voronoiShatter_uniformDistributionPoints(TrianglesList &meshTriangles, int numPoints, bool doDisjointMesh, bool useDelaunay, double bCriteria, double sCriteria)
{
	//Build MeshData
	TrianglesInfoList cutInfo = createNewTriangleInfoList(meshTriangles);
	MeshData meshData(meshTriangles, cutInfo);
	return voronoiShatter_uniformDistributionPoints(meshData, numPoints, doDisjointMesh, useDelaunay, bCriteria, sCriteria);
}
コード例 #2
0
std::list<MeshData> voronoiShatter_sphereDistributionOnPoint(TrianglesList &meshTriangles, int numPoints, KDPoint targetPoint, double radius, bool doDisjointMesh)
{
	//Build MeshData
	TrianglesInfoList cutInfo = createNewTriangleInfoList(meshTriangles);
	MeshData meshData(meshTriangles, cutInfo);

	return voronoiShatter_sphereDistributionOnPoint(meshData, numPoints, targetPoint, radius, doDisjointMesh);
}
コード例 #3
0
TrianglesList scaleAndCenterMesh(TrianglesList &meshTriangles, double scaleFactor)
{
	//Build MeshData
	TrianglesInfoList cutInfo = createNewTriangleInfoList(meshTriangles);
	MeshData meshData(meshTriangles, cutInfo);

	//Center mesh
	std::list<MeshData> listMeshData;
	listMeshData.push_back(meshData);
	std::list<TranslatedMeshData> translatedMeshData = centerMeshesInBarycenter(listMeshData);

	//Scale mesh
	MeshData scaledMeshData = scaleMesh(translatedMeshData.front().first, scaleFactor);

	return scaledMeshData.first;
}
コード例 #4
0
ファイル: OBJReader.cpp プロジェクト: mpj500/creepy-capsicum
std::shared_ptr<MeshData> ReadOBJ(std::istream* stream, IImportExportCallbacks* callbacks)
{
    OBJParser parser;

    stream->seekg (0, stream->end);
    size_t streamLength = stream->tellg();
    stream->seekg (0, stream->beg);

    int lineCount = 0;
    while( stream->peek() != EOF )
    {
        if (((lineCount++) % 20) == 0 &&
            callbacks &&
            !callbacks->HandleProgress("Parsing OBJ", float(double(stream->tellg()) / double(streamLength))))
        {
            return nullptr;
        }

        char lineBuff[2048];
        stream->getline(lineBuff, sizeof(lineBuff)-1);
        lineBuff[sizeof(lineBuff)-1] = 0;
        parser.ParseLine(lineBuff);
    }

    if (callbacks && !callbacks->HandleProgress("Parsing OBJ", 1.0f))
    {
        return nullptr;
    }

    RawMeshDataWithCallbacks meshData(callbacks);
    
    // map directly onto the parsed OBJ vertex attribute buffers
    meshData.VertexAttributes.resize(3);
    
    meshData.VertexAttributes[0].MapOntoStdVector( parser.m_positions );
    meshData.VertexAttributes[0].Type = ElementType::Position;

    meshData.VertexAttributes[1].MapOntoStdVector( parser.m_uvs );
    meshData.VertexAttributes[1].Type = ElementType::TextureUV;

    meshData.VertexAttributes[2].MapOntoStdVector( parser.m_normals );
    meshData.VertexAttributes[2].Type = ElementType::Normal;

    // map directly onto the parsed OBJ index buffers
    meshData.IndexStreams.resize(3);
    meshData.IndexStreams[0].MapOntoStdVector( parser.m_triIndices, 0, 3 );
    meshData.IndexStreams[0].Type = ElementType::Index;

    meshData.IndexStreams[1].MapOntoStdVector( parser.m_triIndices, 1, 3 );
    meshData.IndexStreams[1].Type = ElementType::Index;

    meshData.IndexStreams[2].MapOntoStdVector( parser.m_triIndices, 2, 3 );
    meshData.IndexStreams[2].Type = ElementType::Index;

    std::vector<ElementType> etypes =
    {
        ElementType::Position,
        ElementType::TextureUV,
        ElementType::Normal
    };

    return MeshData::CreateCompacted(&meshData, etypes, true);
}
コード例 #5
0
ファイル: LayerFactory.C プロジェクト: jlane-waikato/IQmol
Layer::List Factory::toLayers(Data::Base& data)
{
   Layer::List layers;

   //qDebug() << "Layer::Factory converting" << Data::Type::toString(data.typeID());

   try {

      switch (data.typeID()) {
   
         case Data::Type::Bank: {
            Data::Bank& bank(dynamic_cast<Data::Bank&>(data));
            layers << convert(bank);
         } break;

         case Data::Type::GeometryList: {
            Data::GeometryList& list(dynamic_cast<Data::GeometryList&>(data));
            layers << convert(list);
         } break;

         case Data::Type::Geometry: {
            Data::Geometry& geometry(dynamic_cast<Data::Geometry&>(data));
            layers << convert(geometry);
         } break;

         case Data::Type::PointChargeList: {
            Data::PointChargeList&  charges(dynamic_cast<Data::PointChargeList&>(data));
            layers << convert(charges);
         } break;

         case Data::Type::MolecularOrbitalsList: {
            Data::MolecularOrbitalsList& list(dynamic_cast<Data::MolecularOrbitalsList&>(data));
            layers << convert(list);
         } break;

         case Data::Type::MolecularOrbitals: {
            Data::MolecularOrbitals& 
               molecularOrbitals(dynamic_cast<Data::MolecularOrbitals&>(data));
            layers.append(new MolecularOrbitals(molecularOrbitals));
         } break;

         case Data::Type::ExcitedStates: {
            Data::ExcitedStates& 
               states(dynamic_cast<Data::ExcitedStates&>(data));
            layers.append(new ExcitedStates(states));
         } break;

         case Data::Type::Frequencies: {
            Data::Frequencies& 
               frequencies(dynamic_cast<Data::Frequencies&>(data));
            layers.append(new Frequencies(frequencies));
         } break;

         case Data::Type::FileList: {
            Data::FileList& fileList(dynamic_cast<Data::FileList&>(data));
            layers << convert(fileList);
         } break;

         case Data::Type::GridData: {
            QLOG_WARN() << "Data::GridData passed to LayerFactory";
            //Data::GridData& grid(dynamic_cast<Data::GridData&>(data));
            //layers.append(new CubeData(grid));
         } break;

         case Data::Type::CubeData: {
            Data::CubeData& cube(dynamic_cast<Data::CubeData&>(data));
            layers.append(new CubeData(cube));
         } break;


         case Data::Type::EfpFragment: {
            Data::EfpFragment& efp(dynamic_cast<Data::EfpFragment&>(data));
            layers.append(new EfpFragment(efp));
         } break;

         case Data::Type::EfpFragmentList: {
            Data::EfpFragmentList& 
               efpList(dynamic_cast<Data::EfpFragmentList&>(data));
            layers << convert(efpList);
         } break;

         case Data::Type::Mesh: {
            Data::Mesh&  meshData(dynamic_cast<Data::Mesh&>(data));
            Data::Surface surface(meshData);
            Layer::Surface* surfaceLayer(new Surface(surface));
            surfaceLayer->setCheckState(Qt::Checked);
            layers.append(surfaceLayer);
         } break;

         case Data::Type::Surface: {
            Data::Surface&  surfaceData(dynamic_cast<Data::Surface&>(data));
            Layer::Surface* surfaceLayer(new Surface(surfaceData));
            surfaceLayer->setCheckState(surfaceData.isVisible() ? Qt::Checked : Qt::Unchecked);
            layers.append(surfaceLayer);
         } break;

         case Data::Type::Nmr: {
            Data::Nmr&  nmrData(dynamic_cast<Data::Nmr&>(data));
            Layer::Nmr* nmrLayer(new Nmr(nmrData));
            layers.append(nmrLayer);
         } break;

         default:
            QLOG_WARN() << "Unimplemented data type in Layer::Factory"
                        <<  Data::Type::toString(data.typeID());
            break;
      }

   } catch (const std::bad_cast& e) {
       QLOG_ERROR() << "Data cast in Layer::Factory failed"
                    << Data::Type::toString(data.typeID());
   }

   return layers;
}