C++-language bindings
This space describes the usage of lib3mf in a C++ host application.
The C++-language bindings come in two different flavors:
If you include the header Cpp/lib3mf_implicit.hpp
, lib3mf will be loaded dynamically during load-time
of your host application through your operating system’s mechanism for loading libraries.
Lib3MF::PWrapper wrapper = CWrapper::loadLibrary();
The shared library file lib3mf.*
. needs to reside in a path that your operating systems checks when loading libraries.
If you include the header CppDynamic/lib3mf_dynamic.hpp
, Lib3MF will be loaded dynamically during run-time of your host application through an
explicit call to
Lib3MF::PWrapper wrapper = Lib3MF::CWrapper::loadLibrary("LibraryLocation/lib3mf.so");
Lib3MF::PWrapper wrapper = Lib3MF::CWrapper::loadLibrary("LibraryLocation/lib3mf.dylib");
Lib3MF::PWrapper wrapper = Lib3MF::CWrapper::loadLibrary("LibraryLocation/lib3mf.dll");
i.e. you need to explicitly provide the location of the shared library file lib3mf.*
.
The Lib3MF::PWrapper
object provides access to all functionality within lib3mf.
Both flavors of the C++-bindings are header-only which makes it extremly easy to include them into existing projects:
Minimal Example Project
Minimal application code:
#include <iostream>
#include "lib3mf_implicit.hpp"
int main()
{
try
{
auto wrapper = Lib3MF::CWrapper::loadLibrary();
Lib3MF_uint32 nMajor, nMinor, nMicro;
wrapper->GetLibraryVersion(nMajor, nMinor, nMicro);
std::cout << "Lib3MF.Version = " << nMajor << "." << nMinor << "." << nMicro;
std::string sPreReleaseInfo;
if (wrapper->GetPrereleaseInformation(sPreReleaseInfo)) {
std::cout << "-" << sPreReleaseInfo;
}
std::string sBuildInfo;
if (wrapper->GetBuildInformation(sBuildInfo)) {
std::cout << "+" << sBuildInfo;
}
std::cout << std::endl;
}
catch (std::exception &e)
{
std::cout << e.what() << std::endl;
return 1;
}
return 0;
}
#include <iostream>
#include "lib3mf_dynamic.hpp"
int main()
{
try
{
std::string libpath = (""); // TODO: put the location of the Lib3MF-library file here.
auto wrapper = Lib3MF::CWrapper::loadLibrary(libpath + "/lib3mf."); // TODO: add correct suffix of the library
Lib3MF_uint32 nMajor, nMinor, nMicro;
wrapper->GetLibraryVersion(nMajor, nMinor, nMicro);
std::cout << "Lib3MF.Version = " << nMajor << "." << nMinor << "." << nMicro;
std::string sPreReleaseInfo;
if (wrapper->GetPrereleaseInformation(sPreReleaseInfo)) {
std::cout << "-" << sPreReleaseInfo;
}
std::string sBuildInfo;
if (wrapper->GetBuildInformation(sBuildInfo)) {
std::cout << "+" << sBuildInfo;
}
std::cout << std::endl;
}
catch (std::exception &e)
{
std::cout << e.what() << std::endl;
return 1;
}
return 0;
}
CMakeLists.txt for minimal project:
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CURRENT_BINDING_DIR ${CMAKE_CURRENT_SOURCE_DIR}/.)
project(Lib3MFExample_CPPImplicit)
set(CMAKE_CXX_STANDARD 11)
add_executable(Lib3MFExample_CPPImplicit "${CMAKE_CURRENT_SOURCE_DIR}/Lib3MF_example.cpp")
find_library(LIB3MFLOCATION lib3mf "${CMAKE_CURRENT_SOURCE_DIR}/../../Implementations/*/*/*")
target_link_libraries(Lib3MFExample_CPPImplicit ${LIB3MFLOCATION})
target_include_directories(Lib3MFExample_CPPImplicit PRIVATE "${CMAKE_CURRENT_BINDING_DIR}")
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CURRENT_BINDING_DIR ${CMAKE_CURRENT_SOURCE_DIR}/.)
project(Lib3MFExample_CPPDynamic)
set(CMAKE_CXX_STANDARD 11)
add_executable(Lib3MFExample_CPPDynamic "${CMAKE_CURRENT_SOURCE_DIR}/Lib3MF_example.cpp")
if (UNIX)
target_link_libraries(Lib3MFExample_CPPDynamic ${CMAKE_DL_LIBS})
endif (UNIX)
target_include_directories(Lib3MFExample_CPPDynamic PRIVATE "${CMAKE_CURRENT_BINDING_DIR}")
The examples in the Cpp/CppDynamic-folders of the binary SDK follow exactly this pattern.
The remainder of this space is an in-depth API-reference for the functionality of lib3mf.
General Information
API-Classes
- CAccessRight
- CAttachment
- CBase
- CBaseMaterialGroup
- CBaseMaterialGroupIterator
- CBeamLattice
- CBeamSet
- CBuildItem
- CBuildItemIterator
- CColorGroup
- CColorGroupIterator
- CComponent
- CComponentsObject
- CComponentsObjectIterator
- CCompositeMaterials
- CCompositeMaterialsIterator
- CConsumer
- CContentEncryptionParams
- CKeyStore
- CMeshObject
- CMeshObjectIterator
- CMetaData
- CMetaDataGroup
- CModel
- CMultiPropertyGroup
- CMultiPropertyGroupIterator
- CObject
- CObjectIterator
- CPackagePart
- CReader
- CResource
- CResourceData
- CResourceDataGroup
- CResourceIterator
- CSlice
- CSliceStack
- CSliceStackIterator
- CTexture2D
- CTexture2DGroup
- CTexture2DGroupIterator
- CTexture2DIterator
- CWriter