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
- CAbsNode
- CAccessRight
- CAdditionNode
- CArcCosNode
- CArcSinNode
- CArcTan2Node
- CArcTanNode
- CAttachment
- CBase
- CBaseMaterialGroup
- CBaseMaterialGroupIterator
- CBeamLattice
- CBeamLatticeNode
- CBeamSet
- CBuildItem
- CBuildItemIterator
- CCeilNode
- CClampNode
- CColorGroup
- CColorGroupIterator
- CComponent
- CComponentsObject
- CComponentsObjectIterator
- CComposeMatrixNode
- CComposeVectorNode
- CCompositeMaterials
- CCompositeMaterialsIterator
- CConstMatNode
- CConstVecNode
- CConstantNode
- CConsumer
- CContentEncryptionParams
- CCosNode
- CCoshNode
- CCrossNode
- CDecomposeVectorNode
- CDivisionNode
- CDotNode
- CExpNode
- CFloorNode
- CFmodNode
- CFractNode
- CFunction
- CFunctionCallNode
- CFunctionFromImage3D
- CFunctionGradientNode
- CFunctionIterator
- CFunctionReference
- CImage3D
- CImage3DIterator
- CImageStack
- CImplicitFunction
- CImplicitNode
- CImplicitPort
- CImplicitPortIterator
- CInverseNode
- CIterator
- CKeyStore
- CLengthNode
- CLevelSet
- CLevelSetIterator
- CLog10Node
- CLog2Node
- CLogNode
- CMatVecMultiplicationNode
- CMaterialMapping
- CMatrixFromColumnsNode
- CMatrixFromRowsNode
- CMaxNode
- CMeshNode
- CMeshObject
- CMeshObjectIterator
- CMetaData
- CMetaDataGroup
- CMinNode
- CModNode
- CModel
- CMultiPropertyGroup
- CMultiPropertyGroupIterator
- CMultiplicationNode
- CNodeIterator
- CNormalizeDistanceNode
- CObject
- CObjectIterator
- COneInputNode
- CPackagePart
- CPowNode
- CReader
- CResource
- CResourceData
- CResourceDataGroup
- CResourceIdNode
- CResourceIterator
- CRoundNode
- CSelectNode
- CSignNode
- CSinNode
- CSinhNode
- CSlice
- CSliceStack
- CSliceStackIterator
- CSqrtNode
- CSubtractionNode
- CTanNode
- CTanhNode
- CTexture2D
- CTexture2DGroup
- CTexture2DGroupIterator
- CTexture2DIterator
- CTransposeNode
- CTriangleSet
- CTwoInputNode
- CUnsignedMeshNode
- CVectorFromScalarNode
- CVolumeData
- CVolumeDataColor
- CVolumeDataComposite
- CVolumeDataProperty
- CWriter