namespace renderer      { class Assembly; }
namespace renderer      { class ParamArray; }

namespace renderer
{

//
// Assembly factory interface.
//

class APPLESEED_DLLSYMBOL IAssemblyFactory
  : public foundation::IUnknown
{
  public:
    // Destructor.
    ~IAssemblyFactory() override {}

    // Return a string identifying this assembly model.
    virtual const char* get_model() const = 0;

    // Create a new assembly.
    virtual foundation::auto_release_ptr<Assembly> create(
        const char*         name,
        const ParamArray&   params = ParamArray()) const = 0;
};

}       // namespace renderer

#endif  // !APPLESEED_RENDERER_MODELING_SCENE_IASSEMBLYFACTORY_H
