DART  6.10.1
AssimpInputResourceAdaptor.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2021, The DART development contributors
3  * All rights reserved.
4  *
5  * The list of contributors can be found at:
6  * https://github.com/dartsim/dart/blob/master/LICENSE
7  *
8  * This file is provided under the following "BSD-style" License:
9  * Redistribution and use in source and binary forms, with or
10  * without modification, are permitted provided that the following
11  * conditions are met:
12  * * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above
15  * copyright notice, this list of conditions and the following
16  * disclaimer in the documentation and/or other materials provided
17  * with the distribution.
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #ifndef DART_DYNAMICS_ASSIMPINPUTRESOURCEADAPTOR_HPP_
34 #define DART_DYNAMICS_ASSIMPINPUTRESOURCEADAPTOR_HPP_
35 
36 #include <assimp/IOStream.hpp>
37 #include <assimp/IOSystem.hpp>
38 #include <assimp/cfileio.h>
39 #include "dart/common/Resource.hpp"
41 
42 namespace dart {
43 namespace dynamics {
44 
45 class AssimpInputResourceRetrieverAdaptor : public Assimp::IOSystem
46 {
47 public:
49  const common::ResourceRetrieverPtr& _resourceRetriever);
51 
56  bool Exists(const char* pFile) const override;
57 
61  char getOsSeparator() const override;
62 
73  Assimp::IOStream* Open(const char* pFile, const char* pMode = "rb") override;
74 
78  void Close(Assimp::IOStream* pFile) override;
79 
80 private:
82 };
83 
84 class AssimpInputResourceAdaptor : public Assimp::IOStream
85 {
86 public:
87  explicit AssimpInputResourceAdaptor(const common::ResourcePtr& _resource);
89 
93  std::size_t Read(
94  void* pvBuffer, std::size_t pSize, std::size_t pCount) override;
95 
97  std::size_t Write(
98  const void* pvBuffer, std::size_t pSize, std::size_t pCount) override;
99 
104  aiReturn Seek(std::size_t pOffset, aiOrigin pOrigin) override;
105 
109  std::size_t Tell() const override;
110 
114  std::size_t FileSize() const override;
115 
117  void Flush() override;
118 
119 private:
121 };
122 
123 aiFileIO createFileIO(Assimp::IOSystem* adaptor);
124 
125 } // namespace dynamics
126 } // namespace dart
127 
128 #endif // ifndef DART_DYNAMICS_ASSIMPINPUTRESOURCEADAPTOR_HPP_
Definition: AssimpInputResourceAdaptor.hpp:85
aiReturn Seek(std::size_t pOffset, aiOrigin pOrigin) override
Set the read/write cursor of the file.
Definition: AssimpInputResourceAdaptor.cpp:134
AssimpInputResourceAdaptor(const common::ResourcePtr &_resource)
Definition: AssimpInputResourceAdaptor.cpp:104
common::ResourcePtr mResource
Definition: AssimpInputResourceAdaptor.hpp:120
void Flush() override
Not implemented. This is a read-only stream.
Definition: AssimpInputResourceAdaptor.cpp:178
std::size_t FileSize() const override
Returns filesize.
Definition: AssimpInputResourceAdaptor.cpp:172
std::size_t Tell() const override
Get the current position of the read/write cursor.
Definition: AssimpInputResourceAdaptor.cpp:166
std::size_t Write(const void *pvBuffer, std::size_t pSize, std::size_t pCount) override
Not implemented. This is a read-only stream.
Definition: AssimpInputResourceAdaptor.cpp:125
virtual ~AssimpInputResourceAdaptor()
Definition: AssimpInputResourceAdaptor.cpp:112
std::size_t Read(void *pvBuffer, std::size_t pSize, std::size_t pCount) override
Read from the file.
Definition: AssimpInputResourceAdaptor.cpp:118
Definition: AssimpInputResourceAdaptor.hpp:46
AssimpInputResourceRetrieverAdaptor(const common::ResourceRetrieverPtr &_resourceRetriever)
Definition: AssimpInputResourceAdaptor.cpp:47
common::ResourceRetrieverPtr mResourceRetriever
Definition: AssimpInputResourceAdaptor.hpp:81
void Close(Assimp::IOStream *pFile) override
Closes the given file and releases all resources associated with it.
Definition: AssimpInputResourceAdaptor.cpp:93
bool Exists(const char *pFile) const override
Tests for the existence of a file at the given path.
Definition: AssimpInputResourceAdaptor.cpp:61
virtual ~AssimpInputResourceRetrieverAdaptor()
Definition: AssimpInputResourceAdaptor.cpp:55
Assimp::IOStream * Open(const char *pFile, const char *pMode="rb") override
Open a new file with a given path.
Definition: AssimpInputResourceAdaptor.cpp:74
char getOsSeparator() const override
Returns the system specific directory separator.
Definition: AssimpInputResourceAdaptor.cpp:67
std::shared_ptr< Resource > ResourcePtr
Definition: Resource.hpp:90
std::shared_ptr< ResourceRetriever > ResourceRetrieverPtr
Definition: ResourceRetriever.hpp:76
aiFileIO createFileIO(Assimp::IOSystem *_system)
Definition: AssimpInputResourceAdaptor.cpp:267
Definition: BulletCollisionDetector.cpp:65