class mrpt::viz::CAssimpModel

Overview

This class can load & render 3D models in a number of different formats (requires the library assimp).

Supported formats (via Assimp library): http://assimp.sourceforge.net/main_features_formats.html

Most common ones: AutoCAD DXF (.dxf), Collada (.dae), Blender 3D (.blend), 3ds Max 3DS (.3ds), 3ds Max ASE (.ase), Quake I (.mdl), Quake II (.md2), Quake III Mesh (.md3), Wavefront OBJ (.obj), Stanford PLY (.ply), glTF (.gltf, .glb), FBX (.fbx), etc.

Models are loaded via CAssimpModel::loadScene()

Architecture (MRPT 3.0) :

The class is a CSetOfObjects container that holds:

mrpt::viz::CAssimpModel

See also:

mrpt::viz::Scene, CSetOfObjects, CSetOfTexturedTriangles

#include <mrpt/viz/CAssimpModel.h>

class CAssimpModel: public mrpt::viz::CSetOfObjects
{
public:
    // typedefs

    typedef std::shared_ptr<mrpt::viz ::CAssimpModel> Ptr;
    typedef std::shared_ptr<const mrpt::viz ::CAssimpModel> ConstPtr;
    typedef std::unique_ptr<mrpt::viz ::CAssimpModel> UniquePtr;
    typedef std::unique_ptr<const mrpt::viz ::CAssimpModel> ConstUniquePtr;

    // structs

    struct AssimpSceneWrapper;
    struct LoadFlags;
    struct LoadedTexture;
    struct TextureInfo;

    // fields

    static constexpr const char* className = "mrpt::viz" "::" "CAssimpModel";

    // construction

    CAssimpModel();
    CAssimpModel(CAssimpModel&&);

    // methods

    static constexpr auto getClassName();
    static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic();
    static std::shared_ptr<CObject> CreateObject();

    template <typename... Args>
    static Ptr Create(Args&&... args);

    template <typename Alloc, typename... Args>
    static Ptr CreateAlloc(
        const Alloc& alloc,
        Args&&... args
        );

    template <typename... Args>
    static UniquePtr CreateUnique(Args&&... args);

    virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const;
    virtual mrpt::rtti::CObject* clone() const;
    void loadScene(const std::string& file_name, int flags = LoadFlags::RealTimeMaxQuality|LoadFlags::FlipUVs|LoadFlags::Verbose);
    CAssimpModel& operator = (CAssimpModel&&);
};

// direct descendants

class CAnimatedAssimpModel;

Inherited Members

public:
    // typedefs

    typedef std::shared_ptr<CObject> Ptr;
    typedef std::shared_ptr<const CObject> ConstPtr;
    typedef std::shared_ptr<CSerializable> Ptr;
    typedef std::shared_ptr<const CSerializable> ConstPtr;
    typedef std::shared_ptr<mrpt::viz ::CSetOfObjects> Ptr;
    typedef std::shared_ptr<const mrpt::viz ::CSetOfObjects> ConstPtr;
    typedef std::unique_ptr<mrpt::viz ::CSetOfObjects> UniquePtr;
    typedef std::unique_ptr<const mrpt::viz ::CSetOfObjects> ConstUniquePtr;
    typedef ListVisualObjects::const_iterator const_iterator;
    typedef ListVisualObjects::iterator iterator;

    // structs

    struct PoseAndScale;
    struct State;

    // fields

    static constexpr const char* className = "mrpt::viz" "::" "CSetOfObjects";

    // methods

    static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic();
    virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const;
    virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const;
    static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic();
    virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const;
    static constexpr auto getClassName();
    static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic();
    static std::shared_ptr<CObject> CreateObject();

    template <typename... Args>
    static Ptr Create(Args&&... args);

    template <typename Alloc, typename... Args>
    static Ptr CreateAlloc(
        const Alloc& alloc,
        Args&&... args
        );

    template <typename... Args>
    static UniquePtr CreateUnique(Args&&... args);

    virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const;
    virtual mrpt::rtti::CObject* clone() const;
    const_iterator begin() const;
    const_iterator end() const;
    iterator begin();
    iterator end();
    void clear();

    template <typename T>
    T::Ptr getByClass(size_t ith = 0);

    virtual bool traceRay(const mrpt::poses::CPose3D& o, double& dist) const;
    virtual CVisualObject& setColor_u8(const mrpt::img::TColor& c);
    bool contains(const CVisualObject::Ptr& obj) const;
    virtual mrpt::math::TBoundingBoxf internalBoundingBoxLocal() const;

Typedefs

typedef std::shared_ptr<mrpt::viz ::CAssimpModel> Ptr

A type for the associated smart pointer.

Methods

virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const

Returns information about the class of an object in runtime.

virtual mrpt::rtti::CObject* clone() const

Returns a deep copy (clone) of the object, indepently of its class.

void loadScene(const std::string& file_name, int flags = LoadFlags::RealTimeMaxQuality|LoadFlags::FlipUVs|LoadFlags::Verbose)

Loads a 3D scene from a file in any Assimp-supported format.

This clears any previously loaded content and populates this object with the loaded model’s geometry, materials, and textures.

Example:

CAssimpModel model;
model.loadScene("robot.dae", CAssimpModel::LoadFlags::RealTimeMaxQuality);
scene->insert(model);

Textures are loaded from paths relative to the model file’s directory

Parameters:

file_name

Path to the 3D model file

flags

Combination of LoadFlags values (OR’d together)

std::runtime_error

On any error during loading or importing